home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Magazin / Future-PD / FinalExistence.amos / FinalExistence.amosSourceCode
AMOS Source Code  |  1998-06-11  |  97KB  |  3,712 lines

  1. '***************************************************************************** 
  2. 'The Chrono Trigger Wanna-Be Engine
  3. 'By John C. Bintz of Internext Software
  4. 'Revision One Zillion+ 
  5. 'Version 1.0g
  6. 'Copyright ï¿½ 1998 John C. Bintz.  All Rights Reserved.  Death to Microsoft.
  7. '
  8. 'This is, in no way whatsoever, connected with Squaresoft of Japan at all. 
  9. 'This RPG engine behaves in a way like my favorite role playing game engine
  10. 'so I'm paying hommage to its parent.  I'm not trying to suck money from 
  11. 'them, nor am I trying to infringe upon anything.  Don't sic the lawyers on me 
  12. 'guys.  I'm just trying to make the Amiga world a better place.
  13. '
  14. 'This puppy has taken probably around three hundred hours of coding, revising, 
  15. 'recoding, rerevising, and testing, and it STILL isn't done!   What I need is
  16. 'a way to draw on the screen.  Plus a team of fifty to write all my games
  17. 'for me.  8^)
  18. '
  19. 'But, now, with the FULLY INTEGRATED EDITOR (well, it just does it all...),  
  20. 'RPG creation will be a slice of pie, er, piece of cake. 
  21. '
  22. 'The Force will be with you, Amy.  Always.  And pray for a PPC Amos someday! 
  23. '***************************************************************************** 
  24.  
  25. 'Revision List 
  26. '============= 
  27. 'Version 1.0b to 1.0c
  28. '--------------------
  29. '* Added Pointer (AKA Squaresoft!) 
  30. '* Caching of Bob Images (VERY fast level loading!)
  31. '* Fixed MAX_ENEMY Bug 
  32. '* Fixed Fight Command Bug 
  33. '* Changed Text Screens From Separate Screen to Overlay (neat!)
  34. '* Other Stuff That I Forget I Did (but I'm sure it was important!)  
  35. '====================  
  36. 'Version 1.0c to 1.0d
  37. '--------------------
  38. '* Added the absolutely BUFF editor with Hypertexted Help document 
  39. '* Hacked MusiCRAFT so I could have GOOD sound 
  40. '* Added the SOUND operative so you can sync SOUND EFFECTS 
  41. '* CAPITALIZED a couple of things
  42. '====================
  43. 'Version 1.0d to 1.0e
  44. '--------------------
  45. '* Updated editor for faster speed and more intuitive use
  46. '* Fixed Frame Displaying, which skipped the first frame on FRAMEANIMs 
  47. '* Made certain commands multithreading for maximum speed! 
  48. '* Trimmed some arrays for memory saving 
  49. '* Allowed for smoother KILLing of objects before level loads
  50. '====================
  51. 'Version 1.0e to 1.0f
  52. '--------------------
  53. '* No more loading Amos to find level problems!  Error window displays 
  54. '  problem on Workbench Screen 
  55. '====================
  56. 'Version 1.0f to 1.0g
  57. '--------------------
  58. '* Small optimizations here and there... 
  59. '* Added QUAKE operative (which I ain't afraid of, of course!) 
  60. '* Allowed more than 255 bobs in an SBOBS bank (had to rewrite the entire
  61. '  frames routine, though...and on my second day off from school, too!)
  62. '* Never use the Trap instruction, especially on a function!  It thrashes
  63. '  Chip memory, which is always bad!  Just be sure your character really 
  64. '  exists when you use the COORDS command. 
  65. '* Changes the FIGHT routine.  Now, enemies are gauged in actual HP, ATK,
  66. '  DEF, and CHARGE.  Plus, there is also a Hit % calc that says you can
  67. '  still hit a guy, no matter what strength you are, and still cause damage. 
  68. '* Removed defunct "How this works" code...as I know how it works!  I wrote
  69. '  it, remember?  Saved a few K in source code.
  70.  
  71. Set Buffer 20
  72. Amos To Back 
  73. CMND$=Command Line$
  74. Screen Open 0,320,200,2,Lowres : Cls 0
  75. Palette $0,$FFF
  76. Degree 
  77. Randomize Timer
  78. Hide On 
  79. Led Off 
  80.  
  81. Erase 1 : Erase 12 : Erase 33
  82.  
  83. Close Editor 
  84. Close Workbench 
  85.  
  86. Assign "rpg:" To Dir$
  87. If Prg State<>-1
  88.   Dir$="RPG:"
  89. End If 
  90.  
  91. Dim SCRVARNAME$(63),SCRPAUSE(255)
  92. Dim PARSE$(9),PV(9),IV(9),DISPLAY$(3),DISPLAY_JUMP$(3)
  93. Dim ITEMS$(255),ITEMHAVE(261),SCOMPILE$(99)
  94. Dim RATINGS(6),CHAR_FRAMEBASE(63)
  95. Dim CHAR_MOVEDIFF(63,1),CHAR_CANCOLLIDE(63)
  96. Dim TCH(63),CHAR_ANIMFRAME(63)
  97. Dim FRAME_DIDCHANGE(63)
  98.  
  99. Dim SCRIPT_CURRCOMMAND(63,3)
  100.  
  101. Dim FIGHT_ENEMIES(15),FIGHT_HP(15),FIGHT_POWER(15)
  102. Dim FIGHT_RESPONSE(16),FIGHT_CHARGE(16),FIGHT_ATTACK(15)
  103. Dim FIGHT_DEFENSE(15)
  104.  
  105. Dim ZNE_TYPE(255),MENU_VAR(9)
  106.  
  107. Dim EFFECT_SETTINGS(9),EFFECT_COLORS(9,9)
  108.  
  109. Dim NEWMENU$(9,1),NEWMENU_POS(9,1),MENU_COLORS(3)
  110.  
  111. Reserve As Work 45,64
  112.  
  113. Global SCRVARNAME$(),SCRPAUSE()
  114. Global PARSE$(),PV(),IV(),DISPLAY$(),DISPLAY_JUMP$()
  115. Global ITEMS$(),ITEMHAVE(),RATINGS(),CHAR_FRAMEBASE()
  116. Global CHAR_MOVEDIFF(),CHAR_CANCOLLIDE(),SCOMPILE$()
  117. Global TCH(),CHAR_ANIMFRAME(),FRAME_DIDCHANGE()
  118.  
  119. Global SCRIPT_CURRCOMMAND()
  120.  
  121. Global FIGHT_ENEMIES(),FIGHT_HP(),FIGHT_POWER(),FIGHT_RESPONSE()
  122. Global FIGHT_CHARGE(),FIGHT_ATTACK(),FIGHT_DEFENSE()
  123.  
  124. Global ZNE_TYPE(),MENU_VAR()
  125.  
  126. Global EFFECT_SETTINGS(),EFFECT_COLORS()
  127.  
  128. Global NEWMENU$(),NEWMENU_POS(),MENU_COLORS()
  129.  
  130. Global SCR_START,SCR_END,SCR_EOF,SCR_PARSE,SCR_CURR
  131. Global DAT_VARS,DAT_SCR,SCR_LEN,SCR_POS,SCR_MAX,SCR_BEGINHERE
  132. Global TXT_GRAB,TXT_POS,DISP_OPTION,DISP_GO
  133. Global DISP_ISOPEN,DISP_SWAP,ENEMY_MAX,IMDEAD
  134.  
  135. Global LEVEL_LOADNOW$,LEVEL_SKIPCHARXY,CHAR_NAME$,FRAMES_FILE$
  136. Global FRAMES_LOAD$
  137.  
  138. Global WALK_DELAY,OFFSET_CHANGE,ZNE_CHECKED
  139.  
  140. Global CHAR_XPOS,CHAR_YPOS,NOFRONTFADE
  141. Global MAP_WIDTH,MAP_HEIGHT,MAP_XPOS,MAP_YPOS
  142.  
  143. Global SSVTIMER,DISPLAY_SHOW,CURRMOD$,CURRLEVEL$
  144. Global CONTROLLOCK,FRAME_PTR,VB_LINE,WALKTHRUWALLS
  145.  
  146. 'Global _X1,_Y1,_X2,_Y2,_WHICH,PTR,A 
  147.  
  148. VB_LINE=250
  149.  
  150. EFFECT_COLORS(0,0)=2
  151. EFFECT_COLORS(0,1)=11
  152. EFFECT_COLORS(0,2)=12
  153.  
  154. EFFECT_COLORS(1,0)=31
  155. EFFECT_COLORS(1,1)=30
  156. EFFECT_COLORS(1,2)=29
  157.  
  158. MUS_NOPLAY=(Instr(Upper$(CMND$),"NOMUSIC")>0)
  159. CDROM=Exist("FE_FMV.iff")
  160.  
  161. ERR_FILE$="RPG:CTW_Error.abk"
  162. On Error Proc INEXT_ERRORTRAP
  163.  
  164. Amos To Front 
  165. Amos Lock 
  166.  
  167. 'Setup 
  168.  
  169. NEWFRAME_SETUP
  170. ITEM_PREP
  171. GLOVAR_PREP
  172. SCOMPILE_SETUP
  173.  
  174. 'Intro Animation 
  175.  
  176. Load "InextIntro.abk",255
  177. S=Start(255)
  178. S=Frame Play(S,1,7)
  179. Double Buffer : Autoback 0
  180. T=Timer+2
  181. Repeat 
  182.   Repeat : Until Timer>T
  183.   OS=S
  184.   S=Frame Play(S,1,7)
  185.   If S<>OS
  186.     Screen Swap : T=Timer+2
  187.   End If 
  188. Until S=OS
  189. T=Timer+30 : Repeat : Until Timer>T
  190. Fade 2 : T=Timer+30 : Repeat : Until Timer>T
  191. Screen Close 7
  192. Erase 255
  193.  
  194. If CDROM
  195.   FMV["FE_FMV.iff"]
  196. End If 
  197.  
  198. BACKTOINTRO:
  199. Screen Open 0,320,200,2,Lowres : Cls 0
  200. Palette $0,$FFF
  201. CHAR_NAME$="Mike"
  202. ZNEJUMP_LEAVE=-1
  203. IMDEAD=False
  204.  
  205. RATING_SET["HP",50]
  206. RATING_SET["MHP",50]
  207. RATING_SET["STR",5]
  208. RATING_SET["DEX",5]
  209. RATING_SET["INT",5]
  210. RATING_SET["CRED",50]
  211.  
  212. FULLINTRO
  213. WHICH=Param
  214.  
  215. If WHICH=0
  216.   If Key State(20)
  217.     Clear Key 
  218.     Print "Variable Space Free:";Free
  219.     Line Input "Name Of Level To Load:";LVL$
  220.     LEVEL_LOAD[LVL$]
  221.   Else 
  222.     LEVEL_LOAD["level1.level"]
  223.   End If 
  224. Else If WHICH=1
  225.   Show On 
  226.   FILE$=Fsel$("*.game","","Choose a Saved Game File")
  227.   Hide On 
  228.   DIDLOAD=False
  229.   If FILE$<>"" : If Exist(FILE$)
  230.       DIDLOAD=True
  231.       GAME_LOAD[FILE$]
  232.   End If : End If 
  233.   If DIDLOAD=False : Goto BACKTOINTRO : End If 
  234. Else If WHICH=2
  235.   If CDROM
  236.     FMV["FE_FMV.iff"]
  237.   Else 
  238.     Load "CDROMOnly.spk",512
  239.     Unpack 512 To 6 : Screen Hide 6
  240.     Screen Open 7,320,200,4096,Lowres : Flash Off : Curs Off : Cls 0
  241.     Get Palette 6
  242.     For I=0 To 99
  243.       Screen Copy 6,0,I*2,320,(I*2)+1 To 7,0,I*2
  244.       Screen Copy 6,0,199-(I*2),320,200-(I*2) To 7,0,199-(I*2)
  245.       If(I and 3)=0 : Wait Vbl : End If 
  246.     Next 
  247.     Screen Close 6
  248.     T=Timer+200
  249.     Repeat : Until Timer>T or Fire(1)
  250.     Screen 7
  251.     For I=0 To 99
  252.       Cls 0,0,I*2 To 320,(I*2)+1
  253.       Cls 0,0,199-(I*2) To 320,200-(I*2)
  254.       If(I and 3)=0 : Wait Vbl : End If 
  255.     Next 
  256.     Screen Close 7
  257.   End If 
  258.   Goto BACKTOINTRO
  259. Else If WHICH=3
  260.   Erase 1 : Erase 33
  261.   Amos Unlock 
  262.   Edit 
  263. End If 
  264.  
  265. Do 
  266.   If TXT_GRAB=-1
  267.     If Key State(68)
  268.       NEWMENU_ROUTINE
  269.     End If 
  270.     If Key State(16)
  271.       Screen 2 : Fade 2
  272.       Wait 30 : Extension_19_0030 : CURRMOD$=""
  273.       Goto BACKTOINTRO
  274.     End If 
  275.     SNAPSHOT
  276.     If Not CONTROLLOCK and Not FRONTSCREENOUT
  277.       If Timer>WALK_DELAY
  278.         OXPOS=CHAR_XPOS : OYPOS=CHAR_YPOS
  279.         If Joy(1)>0
  280.           A=-1
  281.           If Jleft(1)
  282.             CHAR_XPOS=CHAR_XPOS-4
  283.             If CHAR_XPOS<0 : CHAR_XPOS=0 : End If 
  284.           End If 
  285.           If Jright(1)
  286.             CHAR_XPOS=CHAR_XPOS+4
  287.             If CHAR_XPOS>MAP_WIDTH : CHAR_XPOS=MAP_WIDTH : End If 
  288.           End If 
  289.           
  290.           If CHAR_XPOS<>OXPOS
  291.             MAP_ZONECHECK[CHAR_XPOS,CHAR_YPOS] : A=Param
  292.             If A=0 : CHAR_XPOS=OXPOS : End If 
  293.             If A=1 : WALK_DELAY=Timer+10 : End If 
  294.             If A=2
  295.               MAP_ZONEGETVAR[ZNE_CHECKED,0] : B=Param
  296.               MAP_ZONEGETVAR[ZNE_CHECKED,1] : CHAR_XPOS=Param
  297.               MAP_ZONEGETVAR[ZNE_CHECKED,2] : CHAR_YPOS=Param
  298.               LEVEL_LOADNOW$="level"+(Str$(B)-" ")+".level"
  299.               LEVEL_SKIPCHARXY=((CHAR_XPOS>-1) and(CHAR_YPOS>-1))
  300.             End If 
  301.             If A=3
  302.               MAP_ZONEGETVAR[ZNE_CHECKED,0] : GROUP=Param
  303.               FIGHT_SETUP[GROUP]
  304.             End If 
  305.             If A=4
  306.               If ZNEJUMP_LEAVE=-1
  307.                 MAP_ZONEGETVAR[ZNE_CHECKED,0] : CHAR=Param
  308.                 MAP_ZONEGETVAR[ZNE_CHECKED,1] : LBL=Param
  309.                 SCRIPT_JUMP[CHAR,"ZONELABEL"+(Str$(LBL)-" ")]
  310.                 ZNEJUMP_LEAVE=ZNEJUMP_CHECKED
  311.               End If 
  312.             End If 
  313.             If ZNEJUMP_LEAVE<>ZNE_CHECKED : ZNEJUMP_LEAVE=-1 : End If 
  314.             
  315.             CHAR_COLLIDE[6]
  316.             If Param>-1
  317.               CHAR_YPOS=OYPOS : SCR=Param
  318.               If CHAR_CANCOLLIDE(SCR)
  319.                 SCRIPT_JUMP[SCR,"COLLIDE"]
  320.               End If 
  321.             End If 
  322.           End If 
  323.           
  324.           If A=2 : Goto QUICKJUMP : End If 
  325.           
  326.           If Jup(1)
  327.             CHAR_YPOS=CHAR_YPOS-4
  328.             If CHAR_YPOS<0 : CHAR_YPOS=0 : End If 
  329.           End If 
  330.           If Jdown(1)
  331.             CHAR_YPOS=CHAR_YPOS+4
  332.             If CHAR_YPOS>MAP_HEIGHT : CHAR_YPOS=MAP_HEIGHT : End If 
  333.           End If 
  334.           
  335.           If CHAR_YPOS<>OYPOS
  336.             MAP_ZONECHECK[CHAR_XPOS,CHAR_YPOS] : A=Param
  337.             If A=0 : CHAR_YPOS=OYPOS : End If 
  338.             If A=1 : WALK_DELAY=Timer+10 : End If 
  339.             If A=2
  340.               MAP_ZONEGETVAR[ZNE_CHECKED,0] : B=Param
  341.               MAP_ZONEGETVAR[ZNE_CHECKED,1] : CHAR_XPOS=Param
  342.               MAP_ZONEGETVAR[ZNE_CHECKED,2] : CHAR_YPOS=Param
  343.               LEVEL_LOADNOW$="level"+(Str$(B)-" ")+".level"
  344.               LEVEL_SKIPCHARXY=((CHAR_XPOS>-1) and(CHAR_YPOS>-1))
  345.             End If 
  346.             If A=3
  347.               MAP_ZONEGETVAR[ZNE_CHECKED,0] : GROUP=Param
  348.               FIGHT_SETUP[GROUP]
  349.             End If 
  350.             If A=4
  351.               If ZNEJUMP_LEAVE=-1
  352.                 MAP_ZONEGETVAR[ZNE_CHECKED,0] : CHAR=Param
  353.                 MAP_ZONEGETVAR[ZNE_CHECKED,1] : LBL=Param
  354.                 SCRIPT_JUMP[CHAR,"ZONELABEL"+(Str$(LBL)-" ")]
  355.                 ZNEJUMP_LEAVE=ZNE_CHECKED
  356.               End If 
  357.             End If 
  358.             If ZNEJUMP_LEAVE<>ZNE_CHECKED : ZNEJUMP_LEAVE=-1 : End If 
  359.             
  360.             CHAR_COLLIDE[6]
  361.             If Param>-1
  362.               CHAR_YPOS=OYPOS : SCR=Param
  363.               If CHAR_CANCOLLIDE(SCR)
  364.                 SCRIPT_JUMP[SCR,"COLLIDE"]
  365.               End If 
  366.             End If 
  367.           End If 
  368.           
  369.           If Fire(1)
  370.             CHAR_COLLIDE[Deek(Sprite Base(I Bob(0) and $3FFF)+2)]
  371.             If Param>-1
  372.               W=Param
  373.               CHAR_FACE[0,W]
  374.               SCRIPT_JUMP[W,"TOUCH"]
  375.             End If 
  376.           End If 
  377.           
  378.           QUICKJUMP:
  379.           
  380.           CHAR_MOVEDIFF[0]
  381.           NEWFRAME_LOOP[0,False]
  382.         End If 
  383.       End If 
  384.     End If 
  385.   End If 
  386.   
  387.   SCRIPT_NEXTCMND
  388.   If IMDEAD
  389.     Screen 2 : Fade 2
  390.     Wait 30 : CURRMOD$=""
  391.      Extension_19_0030 : Erase 33
  392.     Goto BACKTOINTRO
  393.   End If 
  394.   LEVEL_CHECK
  395.   If CONTROLLOCK
  396.     CHAR_XPOS=X Bob(0)
  397.     CHAR_YPOS=Y Bob(0)
  398.     SCRNSAVER_KILL
  399.   End If 
  400.   Bob 0,CHAR_XPOS,CHAR_YPOS,
  401.   MAP_DISPLAY
  402.   SCRNSAVER
  403. Loop 
  404.  
  405. Procedure CHAR_MOVEDIFF[WHICH]
  406.   On Error Proc INEXT_ERRORTRAP
  407.   DX=X Bob(WHICH)-CHAR_MOVEDIFF(WHICH,0)
  408.   DY=Y Bob(WHICH)-CHAR_MOVEDIFF(WHICH,1)
  409.   If DX<>0 or DY<>0
  410.     NEWFRAME_CURRFRAMESET[WHICH] : CF=Param
  411.     If Abs(DX)>Abs(DY)
  412.       If DX>0 : NF=2
  413.     Else : NF=3 : End If 
  414.     Else 
  415.       If DY>0 : NF=0
  416.     Else : NF=1 : End If 
  417.     End If 
  418.     NF=NF+CHAR_FRAMEBASE(WHICH)
  419.     If NF<>CF
  420.       NEWFRAME_SET[WHICH,NF,False]
  421.     End If 
  422.     CHAR_MOVEDIFF(WHICH,0)=X Bob(WHICH)
  423.     CHAR_MOVEDIFF(WHICH,1)=Y Bob(WHICH)
  424.   End If 
  425. End Proc
  426.  
  427. Procedure SCRIPT_PREP
  428.   On Error Proc INEXT_ERRORTRAP
  429.   SCR_MAX=-1 : TXT_GRAB=-1 : SCR_CURR=0
  430.   Erase 69 : Erase 70
  431.   Reserve As Work 68,65536 : Rem Variables
  432.   Reserve As Work 67,5120 : Rem Scripts and Groups 
  433.   
  434.   DAT_VARS=Start(68) : DAT_SCR=Start(67)
  435. End Proc
  436. Procedure SCRIPT_SKIP
  437.   On Error Proc INEXT_ERRORTRAP
  438.   Loke DAT_SCR+(SCR_CURR*12),0
  439.   Loke DAT_SCR+(SCR_CURR*12)+4,0
  440.   Inc SCR_CURR : Inc SCR_MAX
  441. End Proc
  442. Procedure SCRIPT_LOAD[FILE$]
  443.   On Error Proc INEXT_ERRORTRAP
  444.   If Not Exist(FILE$)
  445.     INEXT_ERROR["Cannot Find .script File","",FILE$]
  446.   End If 
  447.   Open In 1,FILE$
  448.   Reserve As Work 69,Lof(1)
  449.   Sload 1 To 69,Lof(1)
  450.   Close 1
  451.   SCR_START=Start(69) : SCR_END=Start(69)+Length(69)-1
  452.    Extension_10_028A 0,31,32,Start(69) To SCR_END
  453.   
  454.   Reserve As Work 71,Length(69)
  455.   
  456.   PTR=Start(69) : CURRVAR=0 : MPTR=Start(71)
  457.   CHAR_CANCOLLIDE(SCR_CURR)=False
  458.   SCRIPT_CURRCOMMAND(SCR_CURR,0)=-1
  459.   SCRPAUSE(SCR_CURR)=0
  460.   CHAR_ANIMFRAME(SCR_CURR)=False
  461.   Repeat 
  462.     SCRIPT_GETCMND[PTR] : PTR=Param
  463.     
  464.     If Not SCR_EOF
  465.       SP$=""
  466.       For I=0 To SCR_PARSE
  467.         If Asc(PARSE$(I))=64
  468.           A=-1
  469.           For J=0 To CURRVAR
  470.             If SCRVARNAME$(J)=PARSE$(I)
  471.               A=J : J=255
  472.             End If 
  473.           Next 
  474.           If A>-1
  475.             PARSE$(I)=Str$(A)-" "
  476.           Else 
  477.             SCRVARNAME$(CURRVAR)=PARSE$(I)
  478.             PARSE$(I)=Str$(CURRVAR)-" "
  479.             Inc CURRVAR
  480.           End If 
  481.           PARSE$(I)="@"+PARSE$(I)
  482.         End If 
  483.         If I=0
  484.           For J=0 To 99
  485.             If SCOMPILE$(J)=PARSE$(0)
  486.               PARSE$(0)=Chr$(J+69) : J=99
  487.             End If 
  488.           Next 
  489.         End If 
  490.         If I=SCR_PARSE
  491.           PARSE$(I)=PARSE$(I)+"|"
  492.         Else 
  493.           PARSE$(I)=PARSE$(I)+" "
  494.         End If 
  495.         SP$=SP$+PARSE$(I)
  496.       Next 
  497.        Extension_10_0084 SP$,MPTR
  498.       MPTR=MPTR+Len(SP$)
  499.       If Upper$(PARSE$(0))=":COLLIDE|"
  500.         CHAR_CANCOLLIDE(SCR_CURR)=True
  501.       End If 
  502.     End If 
  503.   Until SCR_EOF
  504.   For I=0 To CURRVAR
  505.     SCRVARNAME$(I)=""
  506.   Next 
  507.   
  508.   TCH(SCR_CURR)=False
  509.   
  510.   SCR_EOF=False
  511.   Bank Shrink 71 To MPTR-Start(71)
  512.   SCR_LEN=Length(71)
  513.   
  514.   If Length(70)=0
  515.     Reserve As Work 70,Length(71)
  516.     Copy Start(71),Start(71)+Length(71) To Start(70)
  517.     SCR_POS=0
  518.   Else 
  519.     SCR_POS=Length(70)
  520.     Reserve As Work 72,Length(70)+Length(71)
  521.     Copy Start(70),Start(70)+Length(70) To Start(72)
  522.     Copy Start(71),Start(71)+Length(71) To Start(72)+Length(70)
  523.     Bank Swap 72,70 : Erase 72
  524.   End If 
  525.   SCR_BEGINHERE=Start(70)
  526.   
  527.   D=SCR_CURR*12
  528.   Loke DAT_SCR+D,SCR_POS
  529.   Loke DAT_SCR+D+4,SCR_LEN
  530.   Loke DAT_SCR+D+8,0
  531.   Erase 71 : Inc SCR_CURR : Inc SCR_MAX
  532. End Proc
  533. Procedure SCOMPILE_SETUP
  534.   On Error Proc INEXT_ERRORTRAP
  535.   Open In 1,"CompileList.txt"
  536.   Set Input 10,-1
  537.   Repeat 
  538.     Line Input #1,A$
  539.     If Extension_10_0512(A$)=2
  540.       SCOMPILE$(Val( Extension_10_0520(1,A$)))=Upper$( Extension_10_0520(2,A$))
  541.     End If 
  542.   Until Eof(1)
  543.   Close 1
  544. End Proc
  545.  
  546. Procedure SNAPSHOT
  547.   If Key State(89)
  548.     S=Screen : Screen 2
  549.     A$=Fsel$("*.iff","","Enter a name for the Snapshot")
  550.     If A$<>"" : Save Iff A$ : End If 
  551.     Screen S
  552.   End If 
  553. End Proc
  554.  
  555. Procedure SCRIPT_GROUP[V,S]
  556.   On Error Proc INEXT_ERRORTRAP
  557.   Loke DAT_SCR+3072+(SCR_CURR*4),V
  558.   Loke DAT_SCR+4096+(SCR_CURR*4),S
  559. End Proc
  560.  
  561. Procedure SCRIPT_GETGROUP[NUM]
  562.   On Error Proc INEXT_ERRORTRAP
  563.   ENEMY_MAX=-1
  564.   For I=1 To SCR_MAX
  565.     If Leek(DAT_SCR+3072+I*4)=NUM
  566.       If X Bob(I)>-50 and Y Bob(I)>-50
  567.         Inc ENEMY_MAX
  568.         FIGHT_ENEMIES(ENEMY_MAX)=I
  569.         FIGHT_POWER(ENEMY_MAX)=Leek(DAT_SCR+4096+I*4)
  570.       End If 
  571.     End If 
  572.   Next 
  573. End Proc
  574. Procedure SCRIPT_SCRGROUP[WHICH]
  575.   On Error Proc INEXT_ERRORTRAP
  576. End Proc[Leek(DAT_SCR+3072+WHICH*4)]
  577.  
  578. Procedure CHAR_SET[FILE$,X,Y,F,V,S]
  579.   'On Error Proc INEXT_ERRORTRAP 
  580.   SCRIPT_GROUP[V,S]
  581.   NEWFRAME_SET[SCR_CURR,F,False]
  582.   For I=0 To 3
  583.     NEWFRAME_GRABSET[F+I]
  584.   Next 
  585.   CHAR_FRAMEBASE(SCR_CURR)=F
  586.   Bob SCR_CURR,X,Y,
  587.   CHAR_MOVEDIFF(SCR_CURR,0)=X
  588.   CHAR_MOVEDIFF(SCR_CURR,1)=Y
  589.   SCRIPT_LOAD[FILE$]
  590. End Proc
  591.  
  592. Procedure SCRIPT_NEXTCMND
  593.   'On Error Proc INEXT_ERRORTRAP 
  594.   Shared MUS_NOPLAY
  595.   If DISP_ISOPEN and DISP_GO
  596.     DISPLAY_WAIT
  597.   Else 
  598.      Extension_5_003A 
  599.     For SCR_CURR=0 To SCR_MAX
  600.       If X Bob(SCR_CURR)>-50 and Y Bob(SCR_CURR)>-50
  601.         If Timer>SCRPAUSE(SCR_CURR)
  602.           If CHAR_ANIMFRAME(SCR_CURR)
  603.             NEWFRAME_MOVE[SCR_CURR,False]
  604.             CHAR_ANIMFRAME(SCR_CURR)= Not Param
  605.             If Not CHAR_ANIMFRAME(SCR_CURR)
  606.               NEWFRAME_CHANGE[SCR_CURR]
  607.               If Not Param
  608.                 CHAR_MOVEDIFF[SCR_CURR]
  609.               End If 
  610.             End If 
  611.           Else 
  612.             If SCRIPT_CURRCOMMAND(SCR_CURR,0)=-1
  613.               SC=SCR_CURR*12
  614.               SCR_START=SCR_BEGINHERE+Leek(DAT_SCR+SC)
  615.               SCR_END=SCR_START+Leek(DAT_SCR+SC+4)
  616.               
  617.               If SCR_START<>SCR_END
  618.                 PTR=SCR_START+Leek(DAT_SCR+SC+8)
  619.                 OPTR=PTR
  620.                 
  621.                 A=Hunt(PTR To SCR_END,"|")
  622.                 If A=0
  623.                   SCR_EOF=True
  624.                   Goto __STOPSCR
  625.                 Else 
  626.                   SCR_EOF=False
  627.                   A$= Extension_10_007A(PTR,A-PTR) : A=A+1
  628.                   SCR_PARSE= Extension_10_0512(A$)
  629.                   For I=1 To SCR_PARSE
  630.                     PARSE$(I-1)= Extension_10_0520(I,A$)
  631.                   Next 
  632.                   SCR_PARSE=SCR_PARSE-1
  633.                 End If 
  634.                 __STOPSCR:
  635.                 
  636.                 If Not SCR_EOF
  637.                   PTR=A
  638.                   C=-1
  639.                   If Len(PARSE$(0))=1
  640.                     C=Asc(PARSE$(0))-69
  641.                   End If 
  642.                   SCRIPT_CURRCOMMAND(SCR_CURR,0)=C
  643.                   SCRIPT_CURRCOMMAND(SCR_CURR,1)=-1
  644.                   
  645.                   FRAME_DIDCHANGE(SCR_CURR)=False
  646.                   
  647.                   If SCR_PARSE>0
  648.                     XYZ=SCR_CURR*256
  649.                     For I=1 To SCR_PARSE
  650.                       If Asc(PARSE$(I))=64
  651.                         IV(I)=Val(Mid$(PARSE$(I),2))
  652.                         PV(I)=Leek(DAT_VARS+XYZ+IV(I)*4)
  653.                       Else 
  654.                         PV(I)=Val(PARSE$(I))
  655.                         IV(I)=-1
  656.                       End If 
  657.                     Next 
  658.                   End If 
  659.                   If TXT_GRAB=SCR_CURR
  660.                     If(C<>50 and C<>51)
  661.                       If TXT_POS>0
  662.                         DISP_GO=True
  663.                         DISPLAY_FIGOPTIONS
  664.                         DISPLAY_TEXT
  665.                         Repeat 
  666.                           DISPLAY_WAIT
  667.                         Until Not DISP_GO
  668.                       End If 
  669.                       DISPLAY_CLOSE
  670.                       TXT_GRAB=-1 : TXT_POS=0
  671.                     End If 
  672.                   End If 
  673.                 End If 
  674.               End If 
  675.             Else 
  676.               C=SCRIPT_CURRCOMMAND(SCR_CURR,0)
  677.             End If 
  678.             
  679.             OXBOB=X Bob(SCR_CURR)
  680.             OYBOB=Y Bob(SCR_CURR)
  681.             
  682.             Gosub CMNDSET1
  683.             
  684.             If TXT_GRAB=SCR_CURR
  685.               If TXT_POS=4
  686.                 DISP_GO=True
  687.                 DISPLAY_FIGOPTIONS
  688.                 DISPLAY_TEXT
  689.                 Repeat 
  690.                   DISPLAY_WAIT
  691.                 Until Not DISP_GO
  692.                 TXT_POS=0
  693.               End If 
  694.             End If 
  695.             
  696.             NEWFRAME_CHANGE[SCR_CURR]
  697.             TA= Not Param
  698.             TB= Not WALKTHRUWALLS
  699.             If TA and TB
  700.               X=X Bob(SCR_CURR) : Y=Y Bob(SCR_CURR)
  701.               MAP_ZONECHECK[X,Y] : A=Param
  702.               If A=0 : X=OXBOB : End If 
  703.               MAP_ZONECHECK[X,Y] : A=Param
  704.               If A=0 : Y=OYBOB : End If 
  705.               Bob SCR_CURR,X,Y,
  706.             End If 
  707.             If Not NOSETPOINTER
  708.               If OPTR=SCR_START+Leek(DAT_SCR+SC+8)
  709.                 Loke DAT_SCR+SC+8,PTR-SCR_START
  710.                 NOSETPOINTER=False
  711.               End If 
  712.             End If 
  713.           End If 
  714.         End If 
  715.         NEWFRAME_CHANGE[SCR_CURR] : DC=Param
  716.         If DC and Not FRAME_DIDCHANGE(SCR_CURR)
  717.           NEWFRAME_LOOP[SCR_CURR,False]
  718.         End If 
  719.       End If 
  720.     Next 
  721.     SUPERSKIP:
  722.      Extension_5_0028 
  723.   End If 
  724.   Pop Proc
  725.   CMNDSET1:
  726.   'If C$="SET" 
  727.   If C=52 : Return : End If 
  728.   If C=0
  729.     VAR_SET[IV(1),PV(2)]
  730.     'Else If C$="MATH" 
  731.   Else If C=1
  732.     O$=PARSE$(2)
  733.     If O$="+"
  734.       RES=PV(1)+PV(3)
  735.     Else If O$="-"
  736.       RES=PV(1)-PV(3)
  737.     Else If O$="*"
  738.       RES=PV(1)*PV(3)
  739.     Else If O$="/" and PV(3)<>0
  740.       RES=PV(1)/PV(3)
  741.     Else If O$="%" and PV(3)<>0
  742.       RES=PV(1) mod PV(3)
  743.     Else If O$="="
  744.       RES=(PV(1)=PV(3))
  745.     Else If O$="<"
  746.       RES=(PV(1)<PV(3))
  747.     Else If O$=">"
  748.       RES=(PV(1)>PV(3))
  749.     Else If O$="<=" or O$="=<"
  750.       RES=(PV(1)<=PV(3))
  751.     Else If O$="=>" or O$=">="
  752.       RES=(PV(1)=>PV(3))
  753.     Else If O$="<>"
  754.       RES=(PV(1)<>PV(3))
  755.     End If 
  756.     If SCR_PARSE=4
  757.       VAR_SET[IV(4),RES]
  758.     Else 
  759.       VAR_SET[IV(1),RES]
  760.     End If 
  761.     'Else If C$="PAUSE"
  762.   Else If C=2
  763.     SCRPAUSE(SCR_CURR)=Timer+PV(1)*50
  764.   Else If C=3
  765.     'Else If C$="FACE" 
  766.     A=Instr("SNEW",Upper$(PARSE$(1)))
  767.     If A=0
  768.       CHAR_MOVEDIFF(SCR_CURR,0)=X Bob(SCR_CURR)+(X Bob(SCR_CURR)-X Bob(PV(1)))
  769.       CHAR_MOVEDIFF(SCR_CURR,1)=Y Bob(SCR_CURR)+(Y Bob(SCR_CURR)-Y Bob(PV(1)))
  770.       CHAR_MOVEDIFF[SCR_CURR]
  771.     Else 
  772.       CF=CHAR_FRAMEBASE(SCR_CURR)+A-1
  773.       NEWFRAME_SET[SCR_CURR,CF,False]
  774.     End If 
  775.     'Else If C$="FRAMEANIM"
  776.   Else If C=4
  777.     CHAR_ANIMFRAME(SCR_CURR)=True
  778.     NEWFRAME_SET[SCR_CURR,PV(1),False]
  779.     NEWFRAME_RESET
  780.     NEWFRAME_GRABSET[PV(1)]
  781.     NEWFRAME_FULLREQUEST
  782.     'Else If C$="MENURESET"
  783.   Else If C=5
  784.     NEWMENU_RESET
  785.     'Else If C$="MENUADD"
  786.   Else If C=6
  787.     NEWMENU_ADD[PARSE$(1)-Chr$(34),PARSE$(2)-Chr$(34)]
  788.     'Else If C$="MENUCHOICE" 
  789.   Else If C=7
  790.     NEWMENU_CHOICE
  791.     A=Param : VAR_SET[IV(1),A]
  792.     'Else If C$="MOVE" 
  793.   Else If C=8
  794.     X=X Bob(SCR_CURR)+PV(1) : Y=Y Bob(SCR_CURR)+PV(2)
  795.     Bob SCR_CURR,X,Y,
  796.     NEWFRAME_LOOP[SCR_CURR,False]
  797.     CHAR_MOVEDIFF[SCR_CURR]
  798.   End If 
  799.   'If C$="GOTO"
  800.   If C=9
  801.     LABEL$=":"+PARSE$(1)
  802.     A=Hunt(SCR_START To SCR_END,LABEL$)
  803.     If A>0 : PTR=A+Len(LABEL$)+1 : End If 
  804.     'Else If C$="ONGOTO" 
  805.   Else If C=10
  806.     JMP=(PV(2)-PV(1))+3
  807.     If JMP=<SCR_PARSE
  808.       LABEL$=":"+PARSE$(JMP)
  809.       A=Hunt(SCR_START To SCR_END,LABEL$)
  810.       If A>0 : PTR=A+Len(LABEL$)+1 : End If 
  811.     End If 
  812.     'Else If C$="LABELJUMP"
  813.   Else If C=11
  814.     SCRIPT_JUMP[PV(1),PARSE$(2)]
  815.     NOSETPOINTER=(SCR_CURR=PV(1))
  816.     'Else If C$="TOGGLETOUCH"
  817.   Else If C=12
  818.     TCH(SCR_CURR)= Not TCH(SCR_CURR)
  819.     'Else If C$="WALK" 
  820.   Else If C=13
  821.     If SCRIPT_CURRCOMMAND(SCR_CURR,1)=-1
  822.       SCRIPT_CURRCOMMAND(SCR_CURR,1)=PV(1)
  823.       SCRIPT_CURRCOMMAND(SCR_CURR,2)=PV(2)
  824.       SCRIPT_CURRCOMMAND(SCR_CURR,3)=PV(3)
  825.     End If 
  826.     D=SCRIPT_CURRCOMMAND(SCR_CURR,1)
  827.     S=SCRIPT_CURRCOMMAND(SCR_CURR,2)
  828.     T=SCRIPT_CURRCOMMAND(SCR_CURR,3)
  829.     X=X Bob(SCR_CURR) : Y=Y Bob(SCR_CURR)
  830.     If D=0
  831.       Y=Y-S
  832.     Else If D=1
  833.       Y=Y+S
  834.     Else If D=2
  835.       X=X-S
  836.     Else If D=3
  837.       X=X+S
  838.     End If 
  839.     Bob SCR_CURR,X,Y,
  840.     NEWFRAME_LOOP[SCR_CURR,False]
  841.     CHAR_MOVEDIFF[SCR_CURR]
  842.     T=T-1
  843.     If T=0 : SCRIPT_CURRCOMMAND(SCR_CURR,0)=-1 : End If 
  844.     SCRIPT_CURRCOMMAND(SCR_CURR,3)=T
  845.     'Else If C$="KEYDOWN"
  846.   Else If C=14
  847.     A$=Upper$(Inkey$)
  848.     VAR_SET[IV(2),Upper$(PARSE$(1))=A$]
  849.     'Else If C$="TOGGLEDISPLAY"
  850.   Else If C=15
  851.     DISPLAY_SHOW= Not DISPLAY_SHOW
  852.     'Else If C$="WALKTO" 
  853.   Else If C=16
  854.     If SCRIPT_CURRCOMMAND(SCR_CURR,1)=-1
  855.       SCRIPT_CURRCOMMAND(SCR_CURR,1)=PV(1)
  856.       SCRIPT_CURRCOMMAND(SCR_CURR,2)=PV(2)
  857.       SCRIPT_CURRCOMMAND(SCR_CURR,3)=PV(3)
  858.     End If 
  859.     X=X Bob(SCR_CURR) : Y=Y Bob(SCR_CURR)
  860.     DX=SCRIPT_CURRCOMMAND(SCR_CURR,1)
  861.     DY=SCRIPT_CURRCOMMAND(SCR_CURR,2)
  862.     SPEED=SCRIPT_CURRCOMMAND(SCR_CURR,3)
  863.     FX=DX-X : FY=DY-Y
  864.     GD=Max(Abs(FX),Abs(FY))
  865.     'GD=(Abs(FX)+Abs(FY))/2
  866.     If SPEED>GD
  867.       X=DX : Y=DY
  868.       SCRIPT_CURRCOMMAND(SCR_CURR,0)=-1
  869.     Else 
  870.       X=X+(FX*SPEED)/GD
  871.       Y=Y+(FY*SPEED)/GD
  872.       MAP_ZONECHECK[X,OYBOB]
  873.       If Param=0 : X=OXBOB : Y=OYBOB+(FY*SPEED)/FY : End If 
  874.       MAP_ZONECHECK[OXBOB,Y]
  875.       If Param=0 : Y=OYBOB : X=OXBOB+(FX*SPEED)/FX : End If 
  876.     End If 
  877.     Bob SCR_CURR,X,Y,
  878.     NEWFRAME_LOOP[SCR_CURR,False]
  879.     CHAR_MOVEDIFF[SCR_CURR]
  880.     'VAR_SET[IV(4),(X=DX) and(Y=DY)] 
  881.     'Else If C$="CHANGEFRAMEBASE"
  882.   Else If C=17
  883.     CHAR_FRAMEBASE(SCR_CURR)=PV(1)
  884.     'Else If C$="MOVETO" 
  885.   Else If C=18
  886.     Bob SCR_CURR,PV(1),PV(2),
  887.     CHAR_MOVEDIFF(SCR_CURR,0)=X Bob(SCR_CURR)
  888.     CHAR_MOVEDIFF(SCR_CURR,1)=Y Bob(SCR_CURR)
  889.     'Else If C$="IF" 
  890.   Else If C=19
  891.     If SCR_PARSE=2
  892.       RES=(PV(1)=True) : P=2
  893.     Else 
  894.       O$=PARSE$(2) : P=4
  895.       If O$="="
  896.         RES=(PV(1)=PV(3))
  897.       Else If O$="<"
  898.         RES=(PV(1)<PV(3))
  899.       Else If O$=">"
  900.         RES=(PV(1)>PV(3))
  901.       Else If O$="<=" or O$="=<"
  902.         RES=(PV(1)<=PV(3))
  903.       Else If O$="=>" or O$=">="
  904.         RES=(PV(1)=>PV(3))
  905.       Else If O$="<>"
  906.         RES=(PV(1)<>PV(3))
  907.       End If 
  908.     End If 
  909.     If RES
  910.       LABEL$=":"+PARSE$(P)
  911.       A=Hunt(SCR_START To SCR_END,LABEL$)
  912.       If A>0 : PTR=A+Len(LABEL$)+1 : End If 
  913.     End If 
  914.     'Else If C$="WAIT" 
  915.   Else If C=20
  916.     SCRPAUSE(SCR_CURR)=Timer+PV(1)
  917.     'Else If C$="RND"
  918.   Else If C=21
  919.     VAR_SET[IV(1),Rnd(PV(2))]
  920.     'Else If C$="TIMER"
  921.   Else If C=22
  922.     VAR_SET[IV(1),Timer]
  923.     'Else If C$="GLOSET" 
  924.   Else If C=23
  925.     GLOVAR_SET[PV(1),PV(2)]
  926.     'Else If C$="GLOGET" 
  927.   Else If C=24
  928.     GLOVAR_GET[PV(1)] : A=Param : VAR_SET[IV(2),A]
  929.     'Else If C$="BITSET" 
  930.   Else If C=25
  931.     Bset PV(2),PV(1)
  932.     VAR_SET[IV(1),PV(1)]
  933.     'Else If C$="BITCLR" 
  934.   Else If C=26
  935.     Bclr PV(2),PV(1)
  936.     VAR_SET[IV(1),PV(1)]
  937.     'Else If C$="BITCHG" 
  938.   Else If C=27
  939.     Bchg PV(2),PV(1)
  940.     VAR_SET[IV(1),PV(1)]
  941.     'Else If C$="BITGET" 
  942.   Else If C=28
  943.     VAR_SET[IV(3),Btst(PV(2),PV(1))]
  944.   End If 
  945.   'If C$="ADDITEM" 
  946.   If C=29
  947.     ITEM_ADD[PARSE$(1)-Chr$(34)]
  948.     'Else If C$="HAVEITEM" 
  949.   Else If C=30
  950.     ITEM_HAVE[PARSE$(1)-Chr$(34)] : A=Param
  951.     VAR_SET[IV(2),A]
  952.     'Else If C$="TAKEITEM" 
  953.   Else If C=31
  954.     ITEM_REMV[PARSE$(1)-Chr$(34)] : A=Param
  955.     VAR_SET[IV(2),A]
  956.  
  957.     'Else If C$="ITEMSPEC" 
  958.   Else If C=32
  959.     ITEM_STATS[PARSE$(1)-Chr$(34),PARSE$(2)-Chr$(34)] : A=Param
  960.     VAR_SET[IV(3),A]
  961.     'Else If C$="KILL" 
  962.   Else If C=33
  963.     Bob SCR_CURR,-50,-50,
  964.     'Else If C$="LOADLEVEL"
  965.   Else If C=34
  966.     LEVEL_LOADNOW$=PARSE$(1)
  967.     If SCR_PARSE=3
  968.       CONTROLLOCK=True
  969.       CHAR_XPOS=PV(2)
  970.       CHAR_YPOS=PV(3)
  971.       LEVEL_SKIPCHARXY=((PV(2)>-1) and(PV(3)>-1))
  972.     End If 
  973.     SCR_CURR=SCR_MAX
  974.     Pop 
  975.     Goto SUPERSKIP
  976.     'Else If C$="ITEMREMOVE" 
  977.   Else If C=35
  978.     A=Start(58)+768
  979.     Bset A+(PV(1) mod 8),A+(PV(1)/8)
  980.     'Else If C$="ITEMISGONE" 
  981.   Else If C=36
  982.     A=Start(58)+768
  983.     VAR_SET[IV(2),Btst(A+(PV(1) mod 8),A+(PV(1)/8))]
  984.     'Else If C$="ITEMKILL" 
  985.   Else If C=37
  986.     A=Start(58)+768
  987.     If Btst(A+(PV(1) mod 8),A+(PV(1)/8))
  988.       Bob SCR_CURR,-50,-50,
  989.     End If 
  990.     'Else If C$="ITEMPUTBACK"
  991.   Else If C=38
  992.     A=Start(58)+768
  993.     Bclr A+(PV(1) mod 8),A+(PV(1)/8)
  994.     'Else If C$="ATTACK" 
  995.   Else If C=39
  996.     Repeat 
  997.       DISPLAY_WAIT
  998.     Until Not DISP_GO
  999.     DISPLAY_CLOSE
  1000.     If SCR_PARSE=1
  1001.       FIGHT_SETUP[PV(1)]
  1002.     Else 
  1003.       SCRIPT_SCRGROUP[SCR_CURR] : WG=Param
  1004.       FIGHT_SETUP[WG]
  1005.     End If 
  1006.     'Else If C$="SOUND"
  1007.   Else If C=40
  1008.     PARSE$(1)=PARSE$(1)-Chr$(34)
  1009.     SOUND_PLAY[PARSE$(1),Val(PARSE$(3)),Val(PARSE$(2)),269]
  1010.     'Else If C$="BUY"
  1011.   Else If C=41
  1012.     PARSE$(1)=PARSE$(1)-Chr$(34)
  1013.     ITEM_WHICH[PARSE$(1)]
  1014.     If Param>0
  1015.       ITEM_STATS[PARSE$(1),"COST"] : CST=Param
  1016.       RATING_GET["CRED"] : CASH=Param
  1017.       If CASH=>CST
  1018.         CASH=CASH-CST
  1019.         ITEM_ADD[PARSE$(1)]
  1020.         RATING_SET["CRED",CASH]
  1021.         PV(2)=-1
  1022.       Else 
  1023.         PV(2)=0
  1024.       End If 
  1025.     Else 
  1026.       PV(2)=0
  1027.     End If 
  1028.     VAR_SET[IV(2),PV(2)]
  1029.     'Else If C$="SELL" 
  1030.   Else If C=42
  1031.     PARSE$(1)=PARSE$(1)-Chr$(34)
  1032.     ITEM_HAVE[PARSE$(1)]
  1033.     If Param
  1034.       ITEM_STATS[PARSE$(1),"COST"] : SELL=(Param*3)/4
  1035.       RATING_GET["CRED"] : CASH=Param+SELL
  1036.       RATING_SET["CRED",CASH]
  1037.       ITEM_REMV[PARSE$(1)]
  1038.       VAR_SET[IV(2),True]
  1039.     Else 
  1040.       VAR_SET[IV(2),False]
  1041.     End If 
  1042.     'Else If C$="COORDS" 
  1043.   Else If C=43
  1044.     '_IBOB_CHECK[PV(1)]
  1045.     'Trap A=I Bob(PV(1)) 
  1046.     'If A>0
  1047.     X=X Bob(PV(1))
  1048.     Y=Y Bob(PV(1))
  1049.     VAR_SET[IV(2),X]
  1050.     VAR_SET[IV(3),Y]
  1051.     'End If  
  1052.     'Else If C$="RATINGGET"
  1053.   Else If C=44
  1054.     RATING_GET[PARSE$(1)] : A=Param
  1055.     VAR_SET[IV(2),A]
  1056.     'Else If C$="RATINGSET"
  1057.   Else If C=45
  1058.     RATING_SET[PARSE$(1),PV(2)]
  1059.     'Else If C$="FADEOUT"
  1060.   Else If C=46
  1061.     CS=Screen : Screen 2
  1062.     Fade PV(1) : Screen CS
  1063.     Wait PV(1)*15
  1064.     'Else If C$="FADEIN" 
  1065.   Else If C=47
  1066.     CS=Screen : Screen 2
  1067.     Fade PV(1) To 0 : Screen CS
  1068.     Wait PV(1)*15
  1069.     'Else If C$="LOCKCONTROLS" 
  1070.   Else If C=48
  1071.     CONTROLLOCK=True
  1072.     WALKTHRUWALLS=(PV(1)=1)
  1073.     'Else If C$="UNLOCKCONTROLS" 
  1074.   Else If C=49
  1075.     CONTROLLOCK=False
  1076.     WALKTHRUWALLS=False
  1077.     'Else If C$="[" or C$="]"
  1078.   Else If C=50 or C=51
  1079.     If C=51
  1080.       M$="!"+(PARSE$(1)-Chr$(34))
  1081.       J$=PARSE$(2)
  1082.     Else 
  1083.       M$=PARSE$(1)-Chr$(34) : J$=""
  1084.       
  1085.       If SCR_PARSE=0
  1086.         If TXT_POS>0
  1087.           DISP_GO=True
  1088.           DISPLAY_FIGOPTIONS
  1089.           DISPLAY_TEXT
  1090.           Repeat 
  1091.             DISPLAY_WAIT
  1092.           Until Not DISP_GO
  1093.         End If 
  1094.         TXT_POS=0
  1095.       Else 
  1096.         If SCR_PARSE>1
  1097.           For I=2 To SCR_PARSE
  1098.             TXT_REPLACE[M$,"%"+(Str$(I-1)-" "),Str$(PV(I))-" "]
  1099.             M$=Param$
  1100.           Next 
  1101.         End If 
  1102.         TXT_REPLACE[M$,"%n",CHAR_NAME$] : M$=Param$
  1103.       End If 
  1104.     End If 
  1105.     
  1106.     If TXT_GRAB=-1
  1107.       If SCR_PARSE>0
  1108.         TXT_GRAB=SCR_CURR : TXT_POS=0
  1109.         DISPLAY$(TXT_POS)=M$ : DISP_GO=False
  1110.         DISPLAY_JUMP$(TXT_POS)=J$
  1111.         ISGRAB=True
  1112.         Inc TXT_POS
  1113.       End If 
  1114.     Else If TXT_GRAB=SCR_CURR
  1115.       If SCR_PARSE>0
  1116.         DISPLAY$(TXT_POS)=M$
  1117.         DISPLAY_JUMP$(TXT_POS)=J$
  1118.         ISGRAB=True
  1119.         Inc TXT_POS
  1120.       End If 
  1121.     End If 
  1122.   Else If C=53
  1123.     'PlayMod 
  1124.     A$="mods/"+PARSE$(1)
  1125.     If Exist(A$)
  1126.       NEWMOD$=Upper$(A$)
  1127.     End If 
  1128.     
  1129.     If Not MUS_NOPLAY
  1130.       If NEWMOD$<>CURRMOD$
  1131.         Erase 33
  1132.         If NEWMOD$<>""
  1133.            Extension_19_0006 "RPG:"+NEWMOD$,33
  1134.            Extension_19_0028 33
  1135.         End If 
  1136.         CURRMOD$=NEWMOD$
  1137.       End If 
  1138.     End If 
  1139.     'CHANGENAME
  1140.   Else If C=54
  1141.     CHAR_NAME$=PARSE$(1)
  1142.     'QUAKE AMIGA 
  1143.   Else If C=56
  1144.     T=Timer+PV(1)*60
  1145.     Repeat 
  1146.       X=Rnd(4)-2
  1147.       Y=Rnd(4)-2
  1148.       Screen Display 2,128+X,50+Y,,
  1149.       Wait Vbl 
  1150.     Until Timer>T
  1151.     Screen Display 2,128,50,,
  1152.   Else If C=57
  1153.     CS=Screen : Screen 2
  1154.     Fade 2 : Screen CS
  1155.     Wait 30
  1156.     CREDITS[PV(1)]
  1157.     IMDEAD=True
  1158.   End If 
  1159.   If(C<>16) and(C<>52) and(C<>13) : SCRIPT_CURRCOMMAND(SCR_CURR,0)=-1 : End If 
  1160.   Return 
  1161. End Proc
  1162. Procedure SCRIPT_GETCMND[PTR]
  1163.   On Error Proc INEXT_ERRORTRAP
  1164.   A=Hunt(PTR To SCR_END,"|")
  1165.   If A=0
  1166.     SCR_EOF=True
  1167.     Goto __STOPSCR
  1168.   Else 
  1169.     SCR_EOF=False
  1170.     A$= Extension_10_007A(PTR,A-PTR) : A=A+1
  1171.     SCR_PARSE= Extension_10_0512(A$)-1
  1172.     For I=0 To SCR_PARSE
  1173.       PARSE$(I)= Extension_10_0520(I+1,A$)
  1174.     Next 
  1175.   End If 
  1176.   __STOPSCR:
  1177. End Proc[A]
  1178. Procedure SCRIPT_JUMP[SCRIPT,LABEL$]
  1179.   On Error Proc INEXT_ERRORTRAP
  1180.   HSCR_START=Start(70)+Leek(DAT_SCR+(SCRIPT*12))
  1181.   HSCR_END=HSCR_START+Leek(DAT_SCR+(SCRIPT*12)+4)
  1182.   
  1183.   If HSCR_START<>HSCR_END
  1184.     If Not TCH(SCRIPT)
  1185.       LABEL$=":"+LABEL$
  1186.       A=Hunt(HSCR_START To HSCR_END,LABEL$)
  1187.       If A>0
  1188.         Loke DAT_SCR+(SCRIPT*12)+8,(A+Len(LABEL$)+1)-HSCR_START
  1189.         SCRIPT_CURRCOMMAND(SCRIPT,0)=-1
  1190.       End If 
  1191.     End If 
  1192.   End If 
  1193. End Proc
  1194.  
  1195. Procedure VAR_SET[N,V]
  1196.   On Error Proc INEXT_ERRORTRAP
  1197.   If N>-1
  1198.     Loke DAT_VARS+SCR_CURR*256+N*4,V
  1199.   End If 
  1200. End Proc
  1201. Procedure VAR_GET[N]
  1202.   On Error Proc INEXT_ERRORTRAP
  1203. End Proc[Leek(Start(68)+SCR_CURR*256+N*4)]
  1204. Procedure GLOVAR_PREP
  1205.   On Error Proc INEXT_ERRORTRAP
  1206.   Reserve As Work 58,1024
  1207. End Proc
  1208. Procedure GLOVAR_SET[N,V]
  1209.   On Error Proc INEXT_ERRORTRAP
  1210.   Loke Start(58)+N*4,V
  1211. End Proc
  1212. Procedure GLOVAR_GET[N]
  1213.   On Error Proc INEXT_ERRORTRAP
  1214. End Proc[Leek(Start(58)+N*4)]
  1215.  
  1216. Procedure MAP_FRONTSCREEN
  1217.   On Error Proc INEXT_ERRORTRAP
  1218.   Shared FRONT_ISOPEN
  1219.   If Not FRONT_ISOPEN
  1220.     Screen Open 2,320,200,64,Lowres : Flash Off : Curs Off : Cls 0
  1221.     Double Buffer : Autoback 0 : Gr Writing 0
  1222.     For I=0 To 31 : Colour I,0 : Next 
  1223.     FRONT_ISOPEN=True
  1224.     Screen 0
  1225.   End If 
  1226. End Proc
  1227. Procedure MAP_FRONTFADEIN
  1228.   On Error Proc INEXT_ERRORTRAP
  1229.   Shared FRONT_ISOPEN
  1230.   If FRONT_ISOPEN
  1231.     S=Screen
  1232.     MAP_DISPLAY
  1233.     Screen 2
  1234.     Fade 3 To 0 : Wait 45
  1235.     FONT_FIND["XEN.font/8"]
  1236.     Set Font Param
  1237.     Screen S
  1238.   End If 
  1239. End Proc
  1240. Procedure MAP_SCREENLOAD[FILE$]
  1241.   On Error Proc INEXT_ERRORTRAP
  1242.   XPK_BANKUNPACK[FILE$,14]
  1243.   Unpack 14 To 0 : Screen Hide 0
  1244.   Erase 14
  1245.   
  1246.   Priority On 
  1247.   Priority Reverse Off 
  1248.   Bob Update Off 
  1249.   
  1250.   MAP_ZONERESET
  1251.   SW=Screen Width-1 : SH=Screen Height-1 : SC=Screen Colour
  1252.   
  1253.   MAP_FRONTCLOSE
  1254.   MAP_FRONTSCREEN
  1255.   
  1256.   DX=CHAR_XPOS-160 : DY=CHAR_YPOS-100
  1257.   If DX>SW-320 : DX=SW-320 : End If 
  1258.   If DX<0 : DX=0 : End If 
  1259.   If DY>SH-200 : DY=SH-200 : End If 
  1260.   If DY<0 : DY=0 : End If 
  1261.   
  1262.   MAP_WIDTH=SW : MAP_HEIGHT=SH
  1263.   MAP_XPOS=DX : MAP_YPOS=DY
  1264.   Screen 0
  1265. End Proc
  1266. Procedure MAP_DISPLAY
  1267.   'On Error Proc INEXT_ERRORTRAP 
  1268.   SC=Screen
  1269.   Bob Clear : Bob Draw 
  1270.   MAP_XPOS=CHAR_XPOS-160
  1271.   MAP_YPOS=CHAR_YPOS-100
  1272.   If MAP_XPOS+320>MAP_WIDTH : MAP_XPOS=MAP_WIDTH-320 : End If 
  1273.   If MAP_XPOS<0 : MAP_XPOS=0 : End If 
  1274.   If MAP_YPOS+200>MAP_HEIGHT : MAP_YPOS=MAP_HEIGHT-200 : End If 
  1275.   If MAP_YPOS<0 : MAP_YPOS=0 : End If 
  1276.   
  1277.   If DISPLAY_SHOW
  1278.     Screen Copy 0,MAP_XPOS,MAP_YPOS,MAP_XPOS+320,MAP_YPOS+200 To 2,0,0
  1279.     EFFECT_LAYDOWN
  1280.     Screen Swap : Wait Vbl 
  1281.   End If 
  1282.   Screen SC
  1283. End Proc
  1284. Procedure MAP_OFFSETFIX[X,Y]
  1285.   On Error Proc INEXT_ERRORTRAP
  1286.   MAP_XPOS=X-160
  1287.   MAP_YPOS=Y-100
  1288.   If MAP_XPOS+320>MAP_WIDTH : MAP_XPOS=MAP_WIDTH-320 : End If 
  1289.   If MAP_XPOS<0 : MAP_XPOS=0 : End If 
  1290.   If MAP_YPOS+200>MAP_HEIGHT : MAP_YPOS=MAP_HEIGHT-200 : End If 
  1291.   If MAP_YPOS<0 : MAP_YPOS=0 : End If 
  1292. End Proc
  1293. Procedure MAP_FRONTCLOSE
  1294.   On Error Proc INEXT_ERRORTRAP
  1295.   Shared FRONT_ISOPEN
  1296.   If FRONT_ISOPEN
  1297.     Screen 2 : Fade 3 : Wait 45
  1298.     Screen Close 2
  1299.     FRONT_ISOPEN=False
  1300.     Screen 0
  1301.   End If 
  1302. End Proc
  1303.  
  1304. Procedure EFFECT_SETUP
  1305.   On Error Proc INEXT_ERRORTRAP
  1306.   If EFFECT_SETTINGS(0)>0
  1307.     KB=True
  1308.     CF=EFFECT_SETTINGS(0)
  1309.     S=Screen
  1310.     Screen Open 5,320,200,32,Lowres : Curs Off : Cls 0
  1311.     Screen Hide 5
  1312.     If CF=1
  1313.       Screen 0
  1314.       For I=0 To 31
  1315.         E=0 : Z=1 : A=Colour(I)
  1316.         For J=0 To 2
  1317.           E=E+Max((((A/Z) and 15)-2)*Z,0) : Z=Z*16
  1318.         Next 
  1319.         Colour I,E
  1320.       Next 
  1321.       Screen 5
  1322.       For I=1 To EFFECT_SETTINGS(1)
  1323.         X=Rnd(320) : Y=Rnd(200)
  1324.         Ink EFFECT_COLORS(0,2) : Draw X,Y To X,Y+3
  1325.         Ink EFFECT_COLORS(0,1) : Plot X,Y+4
  1326.         Ink EFFECT_COLORS(0,0) : Plot X,Y+5
  1327.       Next 
  1328.       EFFECT_SETTINGS(9)=0
  1329.     Else If CF=2
  1330.       Screen 0
  1331.       For I=0 To 31
  1332.         E=0 : Z=1 : A=Colour(I)
  1333.         For J=0 To 2
  1334.           E=E+Min((((A/Z) and 15)+1),15)*Z : Z=Z*16
  1335.         Next 
  1336.         Colour I,E
  1337.       Next 
  1338.       Screen 5
  1339.       For I=1 To EFFECT_SETTINGS(1)
  1340.         X=Rnd(320) : Y=Rnd(200)
  1341.         Ink EFFECT_COLORS(1,0) : Box X,Y To X+1,Y+1
  1342.         Ink EFFECT_COLORS(1,1) : Plot X,Y+1
  1343.         Ink EFFECT_COLORS(1,2) : Plot X+1,Y
  1344.       Next 
  1345.       EFFECT_SETTINGS(9)=0
  1346.     Else If CF=3
  1347.       KB=False
  1348.       CS=Start(45)
  1349.       EFFECT_SETTINGS(9)=0
  1350.       Screen 0
  1351.       For I=0 To 31
  1352.         E=0 : Z=1 : A=Colour(I)
  1353.         For J=0 To 2
  1354.           E=E+Max((((A/Z) and 15)-4),0)*Z : Z=Z*16
  1355.         Next 
  1356.         Doke CS,E : CS=CS+2
  1357.       Next 
  1358.     Else If CF=4
  1359.       KB=False
  1360.       CS=Start(45)
  1361.       EFFECT_SETTINGS(9)=0
  1362.       Screen 0
  1363.       For I=0 To 31
  1364.         E=0 : F=0 : Z=1 : A=Colour(I)
  1365.         For J=0 To 2
  1366.           F=F+Max((((A/Z) and 15)-2),0)*Z
  1367.           E=E+Min((((A/Z) and 15)+4),15)*Z : Z=Z*16
  1368.         Next 
  1369.         Doke CS,E : CS=CS+2 : Colour I,F
  1370.       Next 
  1371.     Else If CF=5
  1372.       Screen 0
  1373.       SC=Screen Colour-1
  1374.       MX=200 : MZ=-1
  1375.       For I=1 To SC
  1376.         A=Colour(I) : Z=1 : E=0
  1377.         For J=0 To 2
  1378.           E=E+((A/Z) and 15)
  1379.           Z=Z*16
  1380.         Next 
  1381.         If E<MX : MX=E : MZ=I : End If 
  1382.       Next 
  1383.       Screen 5
  1384.       Ink MZ
  1385.       Gr Writing 0
  1386.       For I=8 To 0 Step -1
  1387.         XD=(I*120)/8+40
  1388.         YD=(I*60)/8+40
  1389.         If I=0
  1390.           P=1
  1391.         Else If I=8
  1392.           P=0
  1393.         Else 
  1394.           P=I+27
  1395.         End If 
  1396.         Set Pattern P
  1397.         Cls 0,160-XD,100-YD To 160+XD,100+YD
  1398.         Ink MZ,0 : Bar 160-XD,100-YD To 160+XD,100+YD
  1399.       Next 
  1400.     Else If CF=99
  1401.       XPK_BANKUNPACK["RPG:Maps/effect"+(Str$(EFFECT_SETTINGS(1))-" ")+".spk",29]
  1402.       Unpack 29 To 5
  1403.       Erase 29
  1404.     End If 
  1405.     If KB
  1406.       Get Block 200,0,0,320,200,1
  1407.     End If 
  1408.     Screen Close 5
  1409.     Screen S
  1410.   End If 
  1411.   
  1412. End Proc
  1413. Procedure EFFECT_LAYDOWN
  1414.   'On Error Proc INEXT_ERRORTRAP 
  1415.   ST=Screen
  1416.   If EFFECT_SETTINGS(0)>0
  1417.     If EFFECT_SETTINGS(0)=1 or EFFECT_SETTINGS(0)=2
  1418.       Screen 2
  1419.       Put Block 200,0,EFFECT_SETTINGS(9)
  1420.       Put Block 200,0,EFFECT_SETTINGS(9)-200
  1421.       Screen 0
  1422.       EFFECT_SETTINGS(9)=(EFFECT_SETTINGS(9)+EFFECT_SETTINGS(2)) mod 200
  1423.     Else If EFFECT_SETTINGS(0)=5
  1424.       Screen 2
  1425.       Put Block 200,0,0
  1426.       Screen 0
  1427.     Else If EFFECT_SETTINGS(0)=99
  1428.       Screen 2
  1429.       Put Block 200,0,0
  1430.       Screen 0
  1431.     Else If EFFECT_SETTINGS(0)=3
  1432.       If Rnd(1)=0
  1433.         Screen 2
  1434.         If EFFECT_SETTINGS(9)
  1435.           Get Palette 0
  1436.         Else 
  1437.           S=Start(45)
  1438.           For I=0 To 31
  1439.             Colour I,Deek(S) : S=S+2
  1440.           Next 
  1441.         End If 
  1442.         Screen 0
  1443.         EFFECT_SETTINGS(9)= Not EFFECT_SETTINGS(9)
  1444.       End If 
  1445.     Else If EFFECT_SETTINGS(0)=4
  1446.       Screen 2
  1447.       If EFFECT_SETTINGS(9)
  1448.         Get Palette 0
  1449.         EFFECT_SETTINGS(9)=False
  1450.       Else 
  1451.         If Rnd(10)=0
  1452.           S=Start(45)
  1453.           For I=0 To 31
  1454.             Colour I,Deek(S) : S=S+2
  1455.           Next 
  1456.         End If 
  1457.         EFFECT_SETTINGS(9)=True
  1458.       End If 
  1459.       Screen 0
  1460.     End If 
  1461.   End If 
  1462.   Screen ST
  1463. End Proc
  1464.  
  1465. Procedure NEWMENU_ROUTINE
  1466.   On Error Proc INEXT_ERRORTRAP
  1467.   Repeat 
  1468.     NEWMENU_RESET
  1469.     NEWMENU_ADD["Equipment","Equipment and Inventory"]
  1470.     NEWMENU_ADD["Load/Save","Load or Save a Game"]
  1471.     NEWMENU_ADD["Stats","Statistics"]
  1472.     NEWMENU_ADD["Cancel","Return To Game"]
  1473.     NEWMENU_CHOICE
  1474.     C=Param
  1475.     If C<>3
  1476.       NEWMENU_RESET
  1477.       If C=0
  1478.         Repeat 
  1479.           NEWMENU_RESET
  1480.           NEWMENU_ADD["Equip","Equip A Weapon or Piece of Armor"]
  1481.           NEWMENU_ADD["Use","Use An Item"]
  1482.           NEWMENU_ADD["Main Menu","Return To Main Menu"]
  1483.           NEWMENU_CHOICE
  1484.           D=Param
  1485.           If D<>2
  1486.             If D=1
  1487.               MITEM=-1
  1488.               For I=5 To 261
  1489.                 If ITEMHAVE(I)>0
  1490.                   Inc MITEM
  1491.                 End If 
  1492.               Next 
  1493.               If MITEM>-1
  1494.                 VPOS=0
  1495.                 Repeat 
  1496.                   NEWMENU_RESET
  1497.                   SPOS=VPOS+5 : QPOS=VPOS
  1498.                   CI=0 : IPOS=SPOS
  1499.                   Repeat 
  1500.                     If ITEMHAVE(IPOS)>0
  1501.                       HP=Deek(Start(60)+ITEMHAVE(IPOS)*8+2)
  1502.                       NEWMENU_ADD[ITEMS$(ITEMHAVE(IPOS)),"Use "+ITEMS$(ITEMHAVE(IPOS))+" for"+Str$(HP)+" HP"]
  1503.                       MENU_VAR(CI)=IPOS
  1504.                       Inc CI
  1505.                     End If 
  1506.                     If CI<6 : Inc IPOS : End If 
  1507.                   Until IPOS=262 or CI=6
  1508.                   If CI=6 or VPOS>0
  1509.                     NEWMENU_ADD["More...","See More Items"]
  1510.                   End If 
  1511.                   NEWMENU_ADD["Cancel","Return To Equip Menu"]
  1512.                   NEWMENU_CHOICE
  1513.                   F=Param
  1514.                   If CI=6
  1515.                     If F=6
  1516.                       Add VPOS,6,0 To MITEM
  1517.                     Else If F<6
  1518.                       If Deek(Start(60)+ITEMHAVE(MENU_VAR(F))*8+6)=4
  1519.                         HP=Deek(Start(60)+ITEMHAVE(MENU_VAR(F))*8+4)
  1520.                         RATINGS(0)=Min(RATINGS(0)+HP,RATINGS(1))
  1521.                         ITEM_REMFROMSPOT[MENU_VAR(F)]
  1522.                         ITEM_REORG
  1523.                       End If 
  1524.                     End If 
  1525.                   Else 
  1526.                     If VPOS>0 and F=CI
  1527.                       VPOS=0
  1528.                     Else 
  1529.                       If F<CI
  1530.                         If Deek(Start(60)+ITEMHAVE(MENU_VAR(F))*8+6)=4
  1531.                           HP=Deek(Start(60)+ITEMHAVE(MENU_VAR(F))*8+4)
  1532.                           RATINGS(0)=Min(RATINGS(0)+HP,RATINGS(1))
  1533.                           ITEM_REMFROMSPOT[MENU_VAR(F)]
  1534.                           ITEM_REORG
  1535.                         End If 
  1536.                       End If 
  1537.                     End If 
  1538.                   End If 
  1539.                   T1=(QPOS=0) and(CI<6) and(CI=F)
  1540.                   T2=((QPOS>0) or(CI<6)) and(F=CI+1)
  1541.                   T3=(CI=6) and(F=CI+1)
  1542.                 Until T1 or T2 or T3
  1543.               End If 
  1544.             Else If D=0
  1545.               Repeat 
  1546.                 NEWMENU_RESET
  1547.                 NEWMENU_ADD["Weapon","Change From "+ITEMS$(ITEMHAVE(0))+" to Another Weapon"]
  1548.                 NEWMENU_ADD["Armor","Change From "+ITEMS$(ITEMHAVE(1))+" to Another Armor"]
  1549.                 NEWMENU_ADD["Gloves","Change From "+ITEMS$(ITEMHAVE(2))+" to Another Set Of Gloves"]
  1550.                 NEWMENU_ADD["Hat","Change From "+ITEMS$(ITEMHAVE(3))+" to Another Hat"]
  1551.                 NEWMENU_ADD["Cancel","Return To Equip Menu"]
  1552.                 NEWMENU_CHOICE
  1553.                 E=Param
  1554.                 If E<>4
  1555.                   VPOS=0 : MITEM=-1
  1556.                   For I=5 To 261
  1557.                     If ITEMHAVE(I)>0
  1558.                       ITN=ITEMHAVE(I)
  1559.                       T=Deek(Start(60)+ITN*8+6)
  1560.                       If T=E
  1561.                         Inc MITEM
  1562.                       End If 
  1563.                     End If 
  1564.                   Next 
  1565.                   If MITEM>-1
  1566.                     Repeat 
  1567.                       NEWMENU_RESET
  1568.                       Q=VPOS : SPOS=5 : QPOS=VPOS
  1569.                       Repeat 
  1570.                         If ITEMHAVE(SPOS)>0
  1571.                           T=Deek(Start(60)+ITEMHAVE(SPOS)*8+6)
  1572.                           If T=E
  1573.                             Dec Q
  1574.                           End If 
  1575.                         End If 
  1576.                         If Q>-1 : Inc SPOS : End If 
  1577.                       Until Q=-1 or SPOS=262
  1578.                       If SPOS=262 and Q>-1
  1579.                         Goto __OUTOFITEMS
  1580.                       End If 
  1581.                       CI=0 : IPOS=SPOS
  1582.                       Repeat 
  1583.                         If ITEMHAVE(IPOS)>0
  1584.                           T=Deek(Start(60)+ITEMHAVE(IPOS)*8+6)
  1585.                           If T=E
  1586.                             NEWMENU_ADD[ITEMS$(ITEMHAVE(IPOS)),"Switch To "+ITEMS$(ITEMHAVE(IPOS))]
  1587.                             MENU_VAR(CI)=IPOS
  1588.                             Inc CI
  1589.                           End If 
  1590.                         End If 
  1591.                         If CI<6 : Inc IPOS : End If 
  1592.                       Until IPOS=262 or CI=6
  1593.                       If CI=6 or VPOS>0
  1594.                         NEWMENU_ADD["More...","See More Items"]
  1595.                       End If 
  1596.                       NEWMENU_ADD["Cancel","Return To Equip Menu"]
  1597.                       NEWMENU_CHOICE
  1598.                       F=Param
  1599.                       If CI=6
  1600.                         If F=6
  1601.                           Add VPOS,6,0 To MITEM
  1602.                         Else If F<6
  1603.                           Swap ITEMHAVE(E),ITEMHAVE(MENU_VAR(F))
  1604.                         End If 
  1605.                       Else 
  1606.                         If VPOS>0 and F=CI
  1607.                           VPOS=0
  1608.                         Else 
  1609.                           If F<CI
  1610.                             Swap ITEMHAVE(E),ITEMHAVE(MENU_VAR(F))
  1611.                           End If 
  1612.                         End If 
  1613.                       End If 
  1614.                       T1=(QPOS=0) and(CI<6) and(CI=F)
  1615.                       T2=((QPOS>0) or(CI<6)) and(F=CI+1)
  1616.                       T3=(CI=6) and(F=CI+1)
  1617.                     Until T1 or T2 or T3
  1618.                   End If 
  1619.                   __OUTOFITEMS:
  1620.                 Until E=4
  1621.               End If 
  1622.             End If 
  1623.           End If 
  1624.         Until D=2
  1625.       Else If C=1
  1626.         NEWMENU_ADD["Load","Load A Game"]
  1627.         NEWMENU_ADD["Save","Save A Game"]
  1628.         NEWMENU_ADD["Main Menu","Return To Main Menu"]
  1629.         Repeat 
  1630.           NEWMENU_CHOICE
  1631.           D=Param
  1632.           If D=0
  1633.             Show On 
  1634.             FILE$=Fsel$("*.game","","Choose A Saved Game")
  1635.             Hide On 
  1636.             If FILE$<>"" : If Exist(FILE$)
  1637.                 GAME_LOAD[FILE$]
  1638.                 D=2 : C=3
  1639.             End If : End If 
  1640.           Else If D=1
  1641.             Show On 
  1642.             FILE$=Fsel$("*.game","","Enter A Name For Your Saved Game")
  1643.             Hide On 
  1644.             If FILE$<>""
  1645.               GAME_SAVE[FILE$]
  1646.             End If 
  1647.           End If 
  1648.         Until D=2
  1649.       Else If C=2
  1650.         NEWMENU_ADD["HP/MHP","HP:"+Str$(RATINGS(0))+"/"+Str$(RATINGS(1))]
  1651.         A$="Str:"+Str$(RATINGS(2))
  1652.         A$=A$+"  Dex:"+Str$(RATINGS(3))
  1653.         A$=A$+"  Int:"+Str$(RATINGS(4))
  1654.         NEWMENU_ADD["Str/Dex/Int",A$]
  1655.         NEWMENU_ADD["Credits",Str$(RATINGS(5))+" Credits"]
  1656.         A$=Str$(RATINGS(6))+"/"
  1657.         Proc RATING_NEXTUP : NUP=Param
  1658.         A$=A$+Str$(NUP)+" Experience to Next Level"
  1659.         NEWMENU_ADD["Exp",A$]
  1660.         Proc ITEM_CALCATTACK : AK=Param
  1661.         Proc ITEM_CALCDEFENSE : DF=Param
  1662.         A$="Attack:"+Str$(AK)
  1663.         A$=A$+"  Defence:"+Str$(DF)
  1664.         NEWMENU_ADD["Atk/Def",A$]
  1665.         NEWMENU_ADD["Main Menu","Return To Main Menu"]
  1666.         Repeat 
  1667.           NEWMENU_CHOICE
  1668.           D=Param
  1669.         Until D=5
  1670.       End If 
  1671.     End If 
  1672.   Until C=3
  1673. End Proc
  1674. Procedure NEWMENU_RESET
  1675.   On Error Proc INEXT_ERRORTRAP
  1676.   Shared MMENU
  1677.   MMENU=-1
  1678. End Proc
  1679. Procedure NEWMENU_ADD[S$,L$]
  1680.   On Error Proc INEXT_ERRORTRAP
  1681.   Shared MMENU
  1682.   Inc MMENU
  1683.   NEWMENU$(MMENU,0)=S$
  1684.   NEWMENU$(MMENU,1)=L$
  1685. End Proc
  1686. Procedure NEWMENU_CHOICE
  1687.   On Error Proc INEXT_ERRORTRAP
  1688.   Shared MMENU
  1689.   
  1690.   S=Screen
  1691.   Screen 2
  1692.   FONT_FIND["XEN.font/8"]
  1693.   Set Font Param
  1694.   Gr Writing 0
  1695.   
  1696.   SPEED=8
  1697.   
  1698.   MENU_XPOS=Min(Max(CHAR_XPOS-MAP_XPOS,80),240)
  1699.   MENU_YPOS=Min(Max(CHAR_YPOS-MAP_YPOS,60),130)
  1700.   
  1701.   DMENU=MMENU+1
  1702.   For I=0 To MMENU
  1703.     ANG=(I*360)/DMENU
  1704.     NEWMENU_POS(I,0)=MENU_XPOS+Sin(ANG)*50
  1705.     NEWMENU_POS(I,1)=MENU_YPOS-Cos(ANG)*50
  1706.   Next 
  1707.   CMENU=0
  1708.   
  1709.   For FRAMES=0 To SPEED
  1710.     Screen Copy 0,MAP_XPOS,MAP_YPOS,MAP_XPOS+320,MAP_YPOS+200 To 2,0,0
  1711.     
  1712.     For I=0 To MMENU
  1713.       CI=(CMENU+I) mod DMENU
  1714.       A=Text Length(NEWMENU$(CI,0))
  1715.       A=A/2
  1716.       
  1717.       XD=NEWMENU_POS(I,0)-MENU_XPOS
  1718.       YD=NEWMENU_POS(I,1)-MENU_YPOS
  1719.       
  1720.       XP=MENU_XPOS+(XD*FRAMES)/SPEED
  1721.       YP=MENU_YPOS+(YD*FRAMES)/SPEED
  1722.       
  1723.       DXP=XP-A-2 : CXP=XP+A+2
  1724.       Cls MENU_COLORS(0),DXP,YP-10 To CXP,YP+2
  1725.       Ink MENU_COLORS(1) : Polyline DXP,YP+2 To DXP,YP-10 To CXP,YP-10
  1726.       Ink MENU_COLORS(2) : Polyline DXP,YP+2 To CXP,YP+2 To CXP,YP-10
  1727.       Ink MENU_COLORS(3) : Text XP-A,YP-1,NEWMENU$(CI,0)
  1728.     Next 
  1729.     
  1730.     Cls MENU_COLORS(0),0,190 To 320,200
  1731.     Ink MENU_COLORS(1) : Polyline 0,190 To 319,190 To 319,199
  1732.     Ink MENU_COLORS(2) : Polyline 0,190 To 0,199 To 319,199
  1733.     Ink MENU_COLORS(3) : Text 2,197,NEWMENU$(OMENU,1)
  1734.     Screen Swap : Extension_18_0A50 VB_LINE
  1735.   Next 
  1736.   
  1737.   Repeat 
  1738.     Screen Copy 0,MAP_XPOS,MAP_YPOS,MAP_XPOS+320,MAP_YPOS+200 To 2,0,0
  1739.     
  1740.     For I=0 To MMENU
  1741.       CI=(CMENU+I) mod DMENU
  1742.       A=Text Length(NEWMENU$(CI,0))
  1743.       A=A/2
  1744.       
  1745.       XP=NEWMENU_POS(I,0) : YP=NEWMENU_POS(I,1)
  1746.       DXP=XP-A-2 : CXP=XP+A+2
  1747.       Cls MENU_COLORS(0),DXP,NEWMENU_POS(I,1)-10 To CXP,NEWMENU_POS(I,1)+2
  1748.       Ink MENU_COLORS(1) : Polyline DXP,YP+2 To DXP,YP-10 To CXP,YP-10
  1749.       Ink MENU_COLORS(2) : Polyline DXP,YP+2 To CXP,YP+2 To CXP,YP-10
  1750.       Ink MENU_COLORS(3) : Text NEWMENU_POS(I,0)-A,NEWMENU_POS(I,1)-1,NEWMENU$(CI,0)
  1751.     Next 
  1752.     
  1753.     Cls MENU_COLORS(0),0,190 To 320,200
  1754.     Ink MENU_COLORS(1) : Polyline 0,190 To 319,190 To 319,199
  1755.     Ink MENU_COLORS(2) : Polyline 0,190 To 0,199 To 319,199
  1756.     Ink MENU_COLORS(3) : Text 2,197,NEWMENU$(CMENU,1)
  1757.     
  1758.     Screen Swap : Extension_18_0A50 VB_LINE
  1759.     
  1760.     OMENU=CMENU
  1761.     Repeat 
  1762.       SNAPSHOT
  1763.       J=Joy(1)
  1764.       Multi Wait 
  1765.     Until J>0
  1766.     
  1767.     If Btst(2,J)
  1768.       Add CMENU,1,0 To MMENU
  1769.       D=1
  1770.     Else If Btst(3,J)
  1771.       Add CMENU,-1,0 To MMENU
  1772.       D=-1
  1773.     End If 
  1774.     Repeat : Until Joy(1)=0
  1775.     
  1776.     If OMENU<>CMENU
  1777.       For FRAMES=0 To SPEED
  1778.         Screen Copy 0,MAP_XPOS,MAP_YPOS,MAP_XPOS+320,MAP_YPOS+200 To 2,0,0
  1779.         For I=0 To MMENU
  1780.           NI=(D+I+DMENU) mod DMENU
  1781.           CI=(CMENU+I) mod DMENU
  1782.           A=Text Length(NEWMENU$(CI,0))
  1783.           A=A/2
  1784.           
  1785.           XD=NEWMENU_POS(I,0)-NEWMENU_POS(NI,0)
  1786.           YD=NEWMENU_POS(I,1)-NEWMENU_POS(NI,1)
  1787.           
  1788.           XP=NEWMENU_POS(NI,0)+(XD*FRAMES)/SPEED
  1789.           YP=NEWMENU_POS(NI,1)+(YD*FRAMES)/SPEED
  1790.           DXP=XP-A-2 : CXP=XP+A+2
  1791.           Cls MENU_COLORS(0),DXP,YP-10 To CXP,YP+2
  1792.           Ink MENU_COLORS(1) : Polyline DXP,YP+2 To DXP,YP-10 To CXP,YP-10
  1793.           Ink MENU_COLORS(2) : Polyline DXP,YP+2 To CXP,YP+2 To CXP,YP-10
  1794.           Ink MENU_COLORS(3) : Text XP-A,YP-1,NEWMENU$(CI,0)
  1795.         Next 
  1796.         Cls MENU_COLORS(0),0,190 To 320,200
  1797.         Ink MENU_COLORS(1) : Polyline 0,190 To 319,190 To 319,199
  1798.         Ink MENU_COLORS(2) : Polyline 0,190 To 0,199 To 319,199
  1799.         Ink MENU_COLORS(3) : Text 2,197,NEWMENU$(OMENU,1)
  1800.         Screen Swap : Extension_18_0A50 VB_LINE
  1801.       Next 
  1802.     End If 
  1803.     
  1804.   Until Btst(4,J)
  1805.   For FRAMES=SPEED To 0 Step -1
  1806.     Screen Copy 0,MAP_XPOS,MAP_YPOS,MAP_XPOS+320,MAP_YPOS+200 To 2,0,0
  1807.     For I=0 To MMENU
  1808.       CI=(CMENU+I) mod DMENU
  1809.       A=Text Length(NEWMENU$(CI,0))
  1810.       A=A/2
  1811.       
  1812.       XD=NEWMENU_POS(I,0)-MENU_XPOS
  1813.       YD=NEWMENU_POS(I,1)-MENU_YPOS
  1814.       
  1815.       XP=MENU_XPOS+(XD*FRAMES)/SPEED
  1816.       YP=MENU_YPOS+(YD*FRAMES)/SPEED
  1817.       DXP=XP-A-2 : CXP=XP+A+2
  1818.       Cls MENU_COLORS(0),DXP,YP-10 To CXP,YP+2
  1819.       Ink MENU_COLORS(1) : Polyline DXP,YP+2 To DXP,YP-10 To CXP,YP-10
  1820.       Ink MENU_COLORS(2) : Polyline DXP,YP+2 To CXP,YP+2 To CXP,YP-10
  1821.       Ink MENU_COLORS(3) : Text XP-A,YP-1,NEWMENU$(CI,0)
  1822.     Next 
  1823.     Ink MENU_COLORS(0) : Bar 0,190 To 320,200
  1824.     Ink MENU_COLORS(1) : Polyline 0,190 To 319,190 To 319,199
  1825.     Ink MENU_COLORS(2) : Polyline 0,190 To 0,199 To 319,199
  1826.     Ink MENU_COLORS(3) : Text 2,197,NEWMENU$(OMENU,1)
  1827.     Screen Swap : Extension_18_0A50 VB_LINE
  1828.   Next 
  1829.   Screen S
  1830. End Proc[CMENU]
  1831.  
  1832. Procedure CLR_SETUP
  1833.   On Error Proc INEXT_ERRORTRAP
  1834.   For I=0 To 3
  1835.     FIND_PEN[$111*(I*5)]
  1836.     MENU_COLORS(I)=Param
  1837.   Next 
  1838. End Proc
  1839.  
  1840. Procedure MAP_ZONERESET
  1841.   On Error Proc INEXT_ERRORTRAP
  1842.   Reserve Zone 256
  1843.   Reserve As Work 62,6000
  1844. End Proc
  1845. Procedure MAP_ZONESET[WHICH,X1,Y1,X2,Y2,TYPE]
  1846.   On Error Proc INEXT_ERRORTRAP
  1847.   If X1>X2 : Swap X1,X2 : End If 
  1848.   If Y1>Y2 : Swap Y1,Y2 : End If 
  1849.   X2=Min(X2,Screen Width-1)
  1850.   Y2=Min(Y2,Screen Height-1)
  1851.   _X1=X1 : _X2=X2 : _Y1=Y1 : _Y2=Y2 : _WHICH=WHICH
  1852.   Set Zone WHICH+1,X1,Y1 To X2,Y2
  1853.   Loke Start(62)+(WHICH*20),TYPE
  1854. End Proc
  1855. Procedure MAP_ZONESETVAR[WHICH,VAR,VL]
  1856.   On Error Proc INEXT_ERRORTRAP
  1857.   Loke Start(62)+(WHICH*20)+4+(VAR*4),VL
  1858. End Proc
  1859. Procedure MAP_ZONEGETVAR[WHICH,VAR]
  1860.   On Error Proc INEXT_ERRORTRAP
  1861. End Proc[Leek(Start(62)+(WHICH*20)+4+(VAR*4))]
  1862. Procedure MAP_ZONECHECK[X,Y]
  1863.   On Error Proc INEXT_ERRORTRAP
  1864.   ZNE_CHECKED=Zone(X,Y)-1
  1865.   If ZNE_CHECKED>-1
  1866.     T=Leek(Start(62)+ZNE_CHECKED*20)
  1867.   Else 
  1868.     T=-1
  1869.   End If 
  1870. End Proc[T]
  1871.  
  1872. Procedure CHAR_COLLIDE[DIST]
  1873.   On Error Proc INEXT_ERRORTRAP
  1874.   P=-1 : DX=DIST : DY=DIST
  1875.   If SCR_MAX>0
  1876.     For I=1 To SCR_MAX
  1877.       X=Abs(X Bob(I)-CHAR_XPOS)
  1878.       Y=Abs(Y Bob(I)-CHAR_YPOS)
  1879.       If X<DX and Y<DY
  1880.         DX=Min(X,DX) : DY=Min(Y,DY) : P=I
  1881.       End If 
  1882.     Next 
  1883.   End If 
  1884. End Proc[P]
  1885. Procedure CHAR_FACE[C1,C2]
  1886.   On Error Proc INEXT_ERRORTRAP
  1887.   NEWFRAME_CHANGE[C1] : A=Param
  1888.   NEWFRAME_CHANGE[C2] : A=(A or Param)
  1889.   If Not A
  1890.     CHAR_MOVEDIFF(C1,0)=X Bob(C1)+(X Bob(C1)-X Bob(C2))
  1891.     CHAR_MOVEDIFF(C1,1)=Y Bob(C1)+(Y Bob(C1)-Y Bob(C2))
  1892.     CHAR_MOVEDIFF[C1]
  1893.     CHAR_MOVEDIFF(C2,0)=X Bob(C2)+(X Bob(C2)-X Bob(C1))
  1894.     CHAR_MOVEDIFF(C2,1)=Y Bob(C2)+(Y Bob(C2)-Y Bob(C1))
  1895.     CHAR_MOVEDIFF[C2]
  1896.   End If 
  1897. End Proc
  1898.  
  1899. Procedure FONT_FIND[NAME$]
  1900.   On Error Proc INEXT_ERRORTRAP
  1901.   NAME$=Upper$(NAME$)
  1902.   Get Rom Fonts : S=1 : F=-1
  1903.   Repeat 
  1904.     If Font$(S)<>""
  1905.       A$=Upper$( Extension_10_0520(1,Font$(S))+"/"+ Extension_10_0520(2,Font$(S)))
  1906.       If A$=NAME$ : F=S : SKIP=True : End If 
  1907.       S=S+1
  1908.     End If 
  1909.   Until SKIP or Font$(S)=""
  1910.   If Not SKIP
  1911.     Get Disc Fonts : S=1
  1912.     Repeat 
  1913.       If Font$(S)<>""
  1914.         A$=Upper$( Extension_10_0520(1,Font$(S))+"/"+ Extension_10_0520(2,Font$(S)))
  1915.         If A$=NAME$ : F=S : SKIP=True : End If 
  1916.         S=S+1
  1917.       End If 
  1918.     Until SKIP or Font$(S)=""
  1919.   End If 
  1920. End Proc[F]
  1921. Procedure TXT_REPLACE[O$,S$,R$]
  1922.   On Error Proc INEXT_ERRORTRAP
  1923.   A=Instr(O$,S$)
  1924.   If A>0
  1925.     Repeat 
  1926.       O$=Left$(O$,A-1)+R$+Mid$(O$,A+Len(S$))
  1927.       A=Instr(O$,S$)
  1928.     Until A=0
  1929.   End If 
  1930. End Proc[O$]
  1931. Procedure FIND_PEN[CLR]
  1932.   On Error Proc INEXT_ERRORTRAP
  1933.   SC=Screen Colour-1
  1934.   MX=200 : MZ=-1
  1935.   For I=0 To SC
  1936.     A=Colour(I) : Z=1 : E=0
  1937.     For J=0 To 2
  1938.       E=E+Abs(((A/Z) and 15)-((CLR/Z) and 15))
  1939.       Z=Z*16
  1940.     Next 
  1941.     If E<MX : MX=E : MZ=I : End If 
  1942.   Next 
  1943. End Proc[MZ]
  1944.  
  1945. Procedure DISPLAY_OPEN
  1946.   On Error Proc INEXT_ERRORTRAP
  1947.   If DISP_ISOPEN=False
  1948.     S=Screen
  1949.     Screen 2
  1950.     FONT_FIND["helvetica.font/15"]
  1951.     Set Font Param
  1952.     Set Text 2
  1953.     Gr Writing 0
  1954.     DISP_ISOPEN=True
  1955.     Screen S
  1956.   End If 
  1957. End Proc
  1958. Procedure DISPLAY_CLOSE
  1959.   On Error Proc INEXT_ERRORTRAP
  1960.   
  1961.   If DISP_ISOPEN=True
  1962.     DISP_ISOPEN=False
  1963.     Screen S
  1964.   End If 
  1965. End Proc
  1966. Procedure DISPLAY_FIGOPTIONS
  1967.   On Error Proc INEXT_ERRORTRAP
  1968.   DISP_OPTION=-1
  1969.   For I=0 To TXT_POS-1
  1970.     If Left$(DISPLAY$(I),1)="!"
  1971.       DISP_OPTION=I : I=TXT_POS
  1972.     End If 
  1973.   Next 
  1974. End Proc
  1975. Procedure DISPLAY_TEXT
  1976.   On Error Proc INEXT_ERRORTRAP
  1977.   If Not DISP_ISOPEN
  1978.     DISPLAY_OPEN
  1979.   End If 
  1980.   S=Screen : Screen 2
  1981.   Screen Copy 0,MAP_XPOS,MAP_YPOS,MAP_XPOS+320,MAP_YPOS+200 To 2,0,0
  1982.   EFFECT_LAYDOWN
  1983.   BY=(TXT_POS-1)*19+24
  1984.   Gr Writing 1 : Ink MENU_COLORS(0),MENU_COLORS(1)
  1985.   Set Pattern 32
  1986.   Bar 0,0 To 320,BY
  1987.   Set Pattern 0
  1988.   Gr Writing 0
  1989.   Ink MENU_COLORS(1) : Box 0,0 To 319,BY
  1990.   Ink MENU_COLORS(2) : Polyline 0,BY To 0,0 To 320,0
  1991.   For I=0 To TXT_POS-1
  1992.     D=(I*19)+16
  1993.     If Left$(DISPLAY$(I),1)="!"
  1994.       X=24 : A$=Mid$(DISPLAY$(I),2)
  1995.     Else 
  1996.       X=4 : A$=DISPLAY$(I)
  1997.     End If 
  1998.     Ink MENU_COLORS(2) : Text X-1,D,A$
  1999.     Ink MENU_COLORS(1) : Text X+1,D,A$
  2000.     Ink MENU_COLORS(3) : Text X,D,A$
  2001.     If I=DISP_OPTION
  2002.       DPOINTER[5,D-15]
  2003.     End If 
  2004.   Next 
  2005.   Screen Swap : Extension_18_0A50 VB_LINE
  2006.   Screen S
  2007. End Proc
  2008. Procedure DISPLAY_WAIT
  2009.   On Error Proc INEXT_ERRORTRAP
  2010.   If DISP_GO
  2011.     SNAPSHOT
  2012.     If(DISP_OPTION>-1) and(Joy(1) and 3)<>0
  2013.       If Jup(1) : M=-1 : End If 
  2014.       If Jdown(1) : M=1 : End If 
  2015.       Repeat 
  2016.         Add DISP_OPTION,M,0 To TXT_POS-1
  2017.       Until Left$(DISPLAY$(DISP_OPTION),1)="!"
  2018.       DISPLAY_TEXT
  2019.       Repeat : Until Joy(1)=0
  2020.     End If 
  2021.     If Fire(1)
  2022.       If DISP_OPTION>-1
  2023.         SCRIPT_JUMP[TXT_GRAB,DISPLAY_JUMP$(DISP_OPTION)]
  2024.       End If 
  2025.       DISP_GO=False : TXT_POS=0
  2026.       Repeat : Until Fire(1)=True
  2027.       Repeat : Until Fire(1)=False
  2028.     End If 
  2029.   End If 
  2030. End Proc
  2031.  
  2032. Procedure AA_FONT[X,Y,TXT$]
  2033.   On Error Proc INEXT_ERRORTRAP
  2034.   Ink MENU_COLORS(1) : Text X-1,Y,TXT$
  2035.   Ink MENU_COLORS(2) : Text X+1,Y,TXT$
  2036.   Ink MENU_COLORS(3) : Text X,Y,TXT$
  2037. End Proc
  2038. Procedure AA_REVFONT[X,Y,TXT$]
  2039.   On Error Proc INEXT_ERRORTRAP
  2040.   Ink MENU_COLORS(1) : Text X-1,Y,TXT$
  2041.   Ink MENU_COLORS(2) : Text X+1,Y,TXT$
  2042.   Ink MENU_COLORS(0) : Text X,Y,TXT$
  2043. End Proc
  2044. Procedure AA_BOX[X1,Y1,X2,Y2]
  2045.   On Error Proc INEXT_ERRORTRAP
  2046.   Ink MENU_COLORS(1) : Box X1,Y1 To X2,Y2
  2047.   Box X1+1,Y1+1 To X2-1,Y2-1
  2048.   Ink MENU_COLORS(2) : Polyline X1,Y2 To X1,Y1 To X2,Y1
  2049.   Polyline X1+1,Y2-1 To X1+1,Y1+1 To X2-1,Y1+1
  2050. End Proc
  2051. Procedure AA_BAR[X1,Y1,X2,Y2]
  2052.   On Error Proc INEXT_ERRORTRAP
  2053.   Cls 2,X1,Y1 To X2,Y2
  2054.   AA_BOX[X1,Y1,X2,Y2]
  2055. End Proc
  2056.  
  2057. Procedure ITEM_CALCATTACK
  2058.   On Error Proc INEXT_ERRORTRAP
  2059.   ITEM_STATS[ITEMS$(ITEMHAVE(0)),"WEAPON"]
  2060.   A=Param+(RATINGS(2)/4)+(RATINGS(4)/8)
  2061. End Proc[A]
  2062. Procedure ITEM_CALCDEFENSE
  2063.   On Error Proc INEXT_ERRORTRAP
  2064.   ITEM_STATS[ITEMS$(ITEMHAVE(1)),"ARMOR"] : A=Param
  2065.   ITEM_STATS[ITEMS$(ITEMHAVE(2)),"ARMOR"] : A=A+Param
  2066.   ITEM_STATS[ITEMS$(ITEMHAVE(3)),"ARMOR"] : A=A+Param
  2067.   A=A+(RATINGS(3)/4)+(RATINGS(4)/8)
  2068. End Proc[A]
  2069. Procedure ITEM_PREP
  2070.   On Error Proc INEXT_ERRORTRAP
  2071.   Shared ITEM_CURR
  2072.   Reserve As Work 60,2048
  2073.   ITEMS$(0)="Nothing"
  2074.   ITEM_CURR=1
  2075.   Open In 3,"items.data"
  2076.   Set Input 10,-1
  2077.   Repeat 
  2078.     Line Input #3,A$
  2079.     If Extension_10_0512(A$)=6
  2080.       NAME$= Extension_10_0520(1,A$)
  2081.       WP=Val( Extension_10_0520(2,A$))
  2082.       AP=Val( Extension_10_0520(3,A$))
  2083.       HP=Val( Extension_10_0520(4,A$))
  2084.       CS=Val( Extension_10_0520(5,A$))
  2085.       TYPE=Val( Extension_10_0520(6,A$))
  2086.       ITEM_ADDNAME[NAME$,WP,AP,HP,CS,TYPE]
  2087.     End If 
  2088.   Until Eof(3)
  2089.   Close 3
  2090. End Proc
  2091. Procedure ITEM_ADDNAME[NAME$,WP,AP,HP,CS,TYPE]
  2092.   On Error Proc INEXT_ERRORTRAP
  2093.   Shared ITEM_CURR
  2094.   ITEMS$(ITEM_CURR)=NAME$
  2095.   S=Start(60)+(ITEM_CURR*8)
  2096.   Poke S,WP
  2097.   Poke S+1,AP
  2098.   Doke S+2,HP
  2099.   Doke S+4,CS
  2100.   Doke S+6,TYPE
  2101.   Inc ITEM_CURR
  2102. End Proc
  2103.  
  2104. Procedure ITEM_REORG
  2105.   On Error Proc INEXT_ERRORTRAP
  2106.   For I=260 To 5 Step -1
  2107.     If ITEMHAVE(I)>0
  2108.       S=I : I=5
  2109.     End If 
  2110.   Next 
  2111.   For I=5 To S
  2112.     If ITEMHAVE(I)=0
  2113.       For J=I+1 To 261
  2114.         ITEMHAVE(J-1)=ITEMHAVE(J)
  2115.       Next 
  2116.       ITEMHAVE(261)=0
  2117.     End If 
  2118.   Next 
  2119. End Proc
  2120. Procedure ITEM_WHICH[NAME$]
  2121.   On Error Proc INEXT_ERRORTRAP
  2122.   Shared ITEM_CURR
  2123.   NAME$=Upper$(NAME$) : RES=0
  2124.   For I=1 To ITEM_CURR-1
  2125.     If NAME$=Upper$(ITEMS$(I))
  2126.       RES=I : I=ITEM_CURR
  2127.     End If 
  2128.   Next 
  2129. End Proc[RES]
  2130.  
  2131. Procedure ITEM_INSPOT[SPOT]
  2132.   On Error Proc INEXT_ERRORTRAP
  2133. End Proc[ITEMS$(ITEMHAVE(SPOT))]
  2134. Procedure ITEM_REMFROMSPOT[SPOT]
  2135.   On Error Proc INEXT_ERRORTRAP
  2136.   A$=ITEMS$(ITEMHAVE(SPOT))
  2137.   ITEMHAVE(SPOT)=0
  2138. End Proc[A$]
  2139. Procedure ITEM_ADDTOSPOT[NAME$,SPOT]
  2140.   On Error Proc INEXT_ERRORTRAP
  2141.   ITEM_WHICH[NAME$] : WHICH=Param
  2142.   ITEMHAVE(SPOT)=WHICH
  2143. End Proc
  2144. Procedure ITEM_ADDNUMSPOT[NUM,SPOT]
  2145.   On Error Proc INEXT_ERRORTRAP
  2146.   ITEMHAVE(SPOT)=NUM
  2147. End Proc
  2148. Procedure ITEM_ADD[NAME$]
  2149.   On Error Proc INEXT_ERRORTRAP
  2150.   For I=5 To 261
  2151.     If ITEMHAVE(I)=0
  2152.       ITEM_WHICH[NAME$]
  2153.       ITEMHAVE(I)=Param : I=261
  2154.     End If 
  2155.   Next 
  2156. End Proc
  2157. Procedure ITEM_REMV[NAME$]
  2158.   On Error Proc INEXT_ERRORTRAP
  2159.   ITEM_WHICH[NAME$] : WHICH=Param
  2160.   For I=5 To 261
  2161.     If ITEMHAVE(I)=WHICH
  2162.       ITEMHAVE(I)=0 : I=261 : RES=True
  2163.     End If 
  2164.   Next 
  2165. End Proc[RES]
  2166. Procedure ITEM_HAVE[NAME$]
  2167.   On Error Proc INEXT_ERRORTRAP
  2168.   ITEM_WHICH[NAME$] : WHICH=Param
  2169.   For I=5 To 261
  2170.     If ITEMHAVE(I)=WHICH
  2171.       I=261 : RES=True
  2172.     End If 
  2173.   Next 
  2174. End Proc[RES]
  2175. Procedure ITEM_STATS[NAME$,WHICH$]
  2176.   On Error Proc INEXT_ERRORTRAP
  2177.   ITEM_WHICH[NAME$] : WHICH=Param
  2178.   A=0
  2179.   If WHICH>0
  2180.     WHICH=Start(60)+WHICH*8
  2181.     WHICH$=Upper$(WHICH$)
  2182.     If WHICH$="WEAPON"
  2183.       A=Peek(WHICH)
  2184.     Else If WHICH$="ARMOR"
  2185.       A=Peek(WHICH+1)
  2186.     Else If WHICH$="HP"
  2187.       A=Deek(WHICH+2)
  2188.     Else If WHICH$="COST"
  2189.       A=Deek(WHICH+4)
  2190.     Else If WHICH$="TYPE"
  2191.       A=Deek(WHICH+6)
  2192.     End If 
  2193.   End If 
  2194. End Proc[A]
  2195.  
  2196. Procedure RATING_ADD[NAME$,V]
  2197.   On Error Proc INEXT_ERRORTRAP
  2198.   NAME$=Upper$(NAME$)
  2199.   For I=0 To 5
  2200.     Read A$
  2201.     If A$=NAME$
  2202.       RATINGS(I)=RATINGS(I)+V
  2203.     End If 
  2204.   Next 
  2205.   Pop Proc
  2206.   Data "HP","MHP","STR","INT","DEX","CRED"
  2207. End Proc
  2208. Procedure RATING_SET[NAME$,V]
  2209.   On Error Proc INEXT_ERRORTRAP
  2210.   NAME$=Upper$(NAME$)
  2211.   For I=0 To 5
  2212.     Read A$
  2213.     If A$=NAME$
  2214.       RATINGS(I)=V
  2215.     End If 
  2216.   Next 
  2217.   Pop Proc
  2218.   Data "HP","MHP","STR","INT","DEX","CRED"
  2219. End Proc
  2220. Procedure RATING_GET[NAME$]
  2221.   On Error Proc INEXT_ERRORTRAP
  2222.   NAME$=Upper$(NAME$)
  2223.   For I=0 To 5
  2224.     Read A$
  2225.     If A$=NAME$
  2226.       V=RATINGS(I)
  2227.     End If 
  2228.   Next 
  2229.   Data "HP","MHP","STR","INT","DEX","CRED"
  2230. End Proc[V]
  2231. Procedure RATING_NEXTUP
  2232.   On Error Proc INEXT_ERRORTRAP
  2233.   NXTUP=50+(RATINGS(1)-1.2)+(RATINGS(2)+RATINGS(3)+RATINGS(4)-15)*12
  2234. End Proc[NXTUP]
  2235.  
  2236. Procedure FIGHT_SETUP[GROUP]
  2237.   On Error Proc INEXT_ERRORTRAP
  2238.   Shared ENEMY_CURRMARK,NOKILL,ENEMY_GROUP
  2239.   SCRIPT_GETGROUP[GROUP]
  2240.   If ENEMY_MAX>-1
  2241.     ENEMY_GROUP=GROUP/10
  2242.     NOKILL=(GROUP>99)
  2243.     ENEMY_CURRMARK=-1
  2244.     Reserve As Work 65,(ENEMY_MAX+2)*16
  2245.     POS_START=Start(65)
  2246.     NEWFRAME_RESET
  2247.     For I=0 To ENEMY_MAX
  2248.       ANG=(I*360)/(ENEMY_MAX+1)
  2249.       DX=CHAR_XPOS+Sin(ANG)*50
  2250.       DY=CHAR_YPOS-Cos(ANG)*50
  2251.       WE=FIGHT_ENEMIES(I)
  2252.       Loke POS_START+(I*16),DX-X Bob(WE)
  2253.       Loke POS_START+(I*16)+4,DY-Y Bob(WE)
  2254.       Loke POS_START+(I*16)+8,X Bob(WE)
  2255.       Loke POS_START+(I*16)+12,Y Bob(WE)
  2256.       FIGHT_RESPONSE(I)=0
  2257.     Next 
  2258.     FIGHT_RESPONSE(16)=0
  2259.     NEWFRAME_SET[0,CHAR_FRAMEBASE(0)+4,False]
  2260.     For I=4 To 7
  2261.       NEWFRAME_GRABSET[CHAR_FRAMEBASE(0)+I]
  2262.     Next 
  2263.     For J=0 To ENEMY_MAX
  2264.       For K=4 To 7
  2265.         NEWFRAME_GRABSET[CHAR_FRAMEBASE(FIGHT_ENEMIES(J))+K]
  2266.       Next 
  2267.       NEWFRAME_SET[FIGHT_ENEMIES(J),CHAR_FRAMEBASE(FIGHT_ENEMIES(J))+6,False]
  2268.     Next 
  2269.     NEWFRAME_GRABSET[4090]
  2270.     NEWFRAME_FULLREQUEST
  2271.     For I=1 To 10
  2272.       HEI=Sin((I*180)/10)*20
  2273.       ALLDONE=True
  2274.       For J=0 To ENEMY_MAX
  2275.         BX=Leek(POS_START+J*16+8) : DX=Leek(POS_START+J*16)
  2276.         BY=Leek(POS_START+J*16+12) : DY=Leek(POS_START+J*16+4)
  2277.         
  2278.         PX=BX+(DX*I)/10
  2279.         PY=BY+(DY*I)/10-HEI
  2280.         
  2281.         Bob FIGHT_ENEMIES(J),PX,PY,
  2282.         'CHAR_MOVEDIFF[FIGHT_ENEMIES(J)] 
  2283.       Next 
  2284.       NEWFRAME_MOVE[0,False]
  2285.       MAP_DISPLAY
  2286.     Next 
  2287.     For J=0 To EMENY_MAX
  2288.       NEWFRAME_SET[FIGHT_ENEMIES(J),CHAR_FRAMEBASE(FIGHT_ENEMIES(J))+4,False]
  2289.     Next 
  2290.     Repeat 
  2291.       ALLDONE=True
  2292.       For J=0 To ENEMY_MAX
  2293.         NEWFRAME_MOVE[FIGHT_ENEMIES(J),False]
  2294.         ALLDONE=ALLDONE and Param
  2295.       Next 
  2296.       NEWFRAME_MOVE[0,False]
  2297.       ALLDONE=ALLDONE and Param
  2298.       MAP_DISPLAY
  2299.     Until ALLDONE
  2300.     
  2301.     'Fight Data
  2302.     'AABBCCCDD: AA (10000000) Attack 
  2303.     '           BB (100000)   Defense
  2304.     '           CCC
  2305.  
  2306.     CM=-1
  2307.     For J=0 To ENEMY_MAX
  2308.       FIGHT_ATTACK(J)=FIGHT_POWER(J)/10000000
  2309.       FIGHT_DEFENSE(J)=(FIGHT_POWER(J)/100000) mod 100
  2310.       FIGHT_HP(J)=(FIGHT_POWER(J)/100) mod 1000
  2311.       CM=Max(FIGHT_POWER(J) mod 100,CM)
  2312.     Next 
  2313.     RATING_GET["DEX"]
  2314.     FRSPEED=Param
  2315.     CM=Max(FRSPEED,CM)
  2316.     
  2317.     For J=0 To ENEMY_MAX
  2318.       FIGHT_CHARGE(J)=((FIGHT_POWER(J) mod 100)*15)/CM
  2319.     Next 
  2320.     FIGHT_CHARGE(16)=(FRSPEED*15)/CM
  2321.     
  2322.     For J=0 To ENEMY_MAX
  2323.       NEWFRAME_SET[FIGHT_ENEMIES(J),CHAR_FRAMEBASE(FIGHT_ENEMIES(J))+5,False]
  2324.     Next 
  2325.     NEWFRAME_SET[0,CHAR_FRAMEBASE(0)+5,False]
  2326.     MAP_DISPLAY
  2327.     
  2328.     SOUND_PLAY["RPG:Sounds/Fight.iff",15,8000,236]
  2329.     
  2330.     FIGHT_SCREENOPEN
  2331.     FIGHT
  2332.     FIGHT_SCREENCLOSE
  2333.   End If 
  2334. End Proc[ENEMY_MAX]
  2335. Procedure FIGHT_SCREENOPEN
  2336.   On Error Proc INEXT_ERRORTRAP
  2337.   S=Screen
  2338.   Screen 2
  2339.   FONT_FIND["XEN.font/8"]
  2340.   Set Font Param
  2341.   
  2342.   Screen Open 1,320,24,8,Lowres : Flash Off : Curs Off : Cls 0
  2343.   Screen Hide 1
  2344.   Double Buffer : Autoback 0
  2345.   FONT_FIND["XEN.font/8"]
  2346.   Set Font Param
  2347.   Gr Writing 0
  2348.   Palette $0,$111,$222,$333,$444,$555,$666,$FFF
  2349.   If CHAR_YPOS-MAP_YPOS<100
  2350.     Screen Display 1,,226,,0
  2351.   Else 
  2352.     Screen Display 1,,50,,0
  2353.   End If 
  2354.   FIGHT_SCREENUPDATE
  2355.   Screen Show 1
  2356.   For I=0 To 24 Step 4
  2357.     Screen Display 1,,,,I
  2358.      Extension_18_0A50 VB_LINE
  2359.   Next 
  2360.   Screen Display 1,,,,24
  2361.   FIGHT_ENEMYWHICH[0]
  2362.   Screen S
  2363. End Proc
  2364. Procedure FIGHT_SCREENCLOSE
  2365.   On Error Proc INEXT_ERRORTRAP
  2366.   For I=24 To 0 Step -4
  2367.     Screen Display 1,,,,I
  2368.      Extension_18_0A50 VB_LINE
  2369.   Next 
  2370.   Screen Close 1
  2371. End Proc
  2372. Procedure FIGHT_BACKDROP
  2373.   On Error Proc INEXT_ERRORTRAP
  2374.   For I=0 To 6
  2375.     Cls I,0,(I*24)/7 To 320,((I+1)*24)/7
  2376.   Next 
  2377. End Proc
  2378. Procedure FIGHT_SCREENUPDATE
  2379.   On Error Proc INEXT_ERRORTRAP
  2380.   Shared FIGHT_CURROPTION
  2381.   S=Screen : Screen 1
  2382.   FIGHT_BACKDROP
  2383.   If FIGHT_CURROPTION=0
  2384.     A$="Attack"
  2385.   Else If FIGHT_CURROPTION=1
  2386.     A$="LightHeal"
  2387.   Else If FIGHT_CURROPTION=2
  2388.     A$="SmartHeal"
  2389.   Else 
  2390.     A$="MaxHeal"
  2391.   End If 
  2392.   If FIGHT_RESPONSE(16)=150
  2393.     AA_FONT[2,16,A$]
  2394.   Else 
  2395.     AA_REVFONT[2,16,A$]
  2396.   End If 
  2397.   Cls 0,84,8 To 160,16
  2398.   Cls 7,84,8 To 84+(FIGHT_RESPONSE(16)*76)/150,16
  2399.   AA_BOX[84,8,160,16]
  2400.   
  2401.   RATING_GET["HP"] : HP=Param
  2402.   RATING_GET["MHP"] : MHP=Param
  2403.   A$="HP:"+(Str$(HP)-" ")+"/"+(Str$(MHP)-" ")
  2404.   AA_FONT[180,16,A$]
  2405.   Screen Copy Logic(1) To Physic(1) : Wait Vbl 
  2406.   Screen S
  2407. End Proc
  2408.  
  2409. Procedure FIGHT_TEXT[TXT$]
  2410.   On Error Proc INEXT_ERRORTRAP
  2411.   S=Screen : Screen 1
  2412.   FIGHT_BACKDROP
  2413.   AA_FONT[4,16,TXT$]
  2414.   Screen Copy Logic To Physic : Extension_18_0A50 VB_LINE
  2415.   Screen S
  2416. End Proc
  2417. Procedure FIGHT
  2418.   On Error Proc INEXT_ERRORTRAP
  2419.   Shared ENEMY_CURRMARK,FIGHT_CURROPTION,NOKILL,ENEMY_GROUP
  2420.   Shared _ATTACK,_DEFENSE
  2421.   FIGHT_END=False
  2422.   RATING_GET["DEX"]
  2423.   FRSPEED=Param
  2424.   
  2425.   RATING_GET["INT"]
  2426.   SMARTS=Param
  2427.   
  2428.   Proc ITEM_CALCATTACK : _ATTACK=Param
  2429.   Proc ITEM_CALCDEFENSE : _DEFENSE=Param
  2430.   CASH=0
  2431.   
  2432.   FIGHT_CURROPTION=0
  2433.   FS_POS=((CHAR_YPOS-MAP_YPOS)<100)
  2434.  
  2435.   For I=0 To 15
  2436.     HIT_PERCENT=Max(HIT_PERCENT,FIGHT_ATTACK(I)+FIGHT_DEFENSE(I))
  2437.   Next 
  2438.   HIT_PERCENT=Max(HIT_PERCENT,(_ATTACK+_DEFENSE))
  2439.  
  2440.   Do 
  2441.     If Key State(88)
  2442.       If Not FS_POS
  2443.         Screen Display 1,,226,,0
  2444.       Else 
  2445.         Screen Display 1,,50,,0
  2446.       End If 
  2447.       Repeat : Until Not Key State(88)
  2448.       FS_POS= Not FS_POS
  2449.     End If 
  2450.     If Jleft(1)
  2451.       D=ENEMY_CURRMARK
  2452.       Repeat 
  2453.         Add D,-1,0 To ENEMY_MAX
  2454.       Until FIGHT_HP(D)>0
  2455.       FIGHT_ENEMYWHICH[D]
  2456.     Else If Jright(1)
  2457.       D=ENEMY_CURRMARK
  2458.       Repeat 
  2459.         Add D,1,0 To ENEMY_MAX
  2460.       Until FIGHT_HP(D)>0
  2461.       FIGHT_ENEMYWHICH[D]
  2462.     Else If Jup(1)
  2463.       Add FIGHT_CURROPTION,-1,0 To 3
  2464.       JS_WAIT
  2465.     Else If Jdown(1)
  2466.       Add FIGHT_CURROPTION,1,0 To 3
  2467.       JS_WAIT
  2468.     Else If Fire(1) and FIGHT_RESPONSE(16)=150
  2469.       FIGHT_RESPONSE(16)=0
  2470.       If FIGHT_CURROPTION=0
  2471.         CE=ENEMY_CURRMARK
  2472.         FIGHT_ENEMYWHICH[-1]
  2473.         WB=FIGHT_ENEMIES(CE)
  2474.         DX=(X Bob(WB)-4)-CHAR_XPOS
  2475.         DY=(Y Bob(WB)+4)-CHAR_YPOS
  2476.         NEWFRAME_SET[0,CHAR_FRAMEBASE(0)+6,False] : OSET=Param
  2477.         
  2478.         For I=1 To 10
  2479.           HEI=Sin((I*180)/10)*20
  2480.           PX=CHAR_XPOS+(DX*I)/10
  2481.           PY=CHAR_YPOS+(DY*I)/10-HEI
  2482.           
  2483.           Bob 0,PX,PY,
  2484.           MAP_DISPLAY
  2485.         Next 
  2486.         
  2487.         HIT=_ATTACK+_DEFENSE
  2488.         If Rnd(HIT_PERCENT)<HIT
  2489.           YOUR_ATK=Rnd(0.2*_ATTACK)+(0.9*_ATTACK)
  2490.           If Rnd(10)=0
  2491.             YOUR_ATK=(YOUR_ATK*5)/4
  2492.             S=Screen : Screen 2
  2493.             For I=0 To 31
  2494.               Colour I,$FFF
  2495.             Next 
  2496.             Fade 2 To 0 : Screen S
  2497.           End If 
  2498.  
  2499.           DMG=YOUR_ATK-FIGHT_DEFENSE(CE)
  2500.  
  2501.           If DMG>0
  2502.             FIGHT_HP(CE)=FIGHT_HP(CE)-DMG
  2503.             A$=Str$(DMG)-" "
  2504.           Else 
  2505.             A=YOUR_ATK*0.1
  2506.             If A>0
  2507.               DMG=Max(1,Rnd(A))
  2508.             Else 
  2509.               DMG=1
  2510.             End If 
  2511.             FIGHT_HP(CE)=FIGHT_HP(CE)-DMG
  2512.             A$=Str$(DMG)-" "
  2513.           End If 
  2514.         Else 
  2515.           A$="Missed!"
  2516.         End If 
  2517.         
  2518.         NEWFRAME_SET[0,CHAR_FRAMEBASE(0)+7,False]
  2519.         SOUND_PLAY["RPG:Sounds/Fight0x.iff",15,8000,236]
  2520.         Repeat 
  2521.           MAP_DISPLAY
  2522.           NEWFRAME_MOVE[0,False]
  2523.         Until Param
  2524.         MAP_DISPLAY
  2525.         Wait 5
  2526.         NEWFRAME_SET[0,CHAR_FRAMEBASE(0)+6,False]
  2527.         
  2528.         For I=10 To 0 Step -1
  2529.           HEI=Sin((I*180)/10)*20
  2530.           PX=CHAR_XPOS+(DX*I)/10
  2531.           PY=CHAR_YPOS+(DY*I)/10-HEI
  2532.           
  2533.           Bob 0,PX,PY,
  2534.           MAP_DISPLAY
  2535.         Next 
  2536.         
  2537.         NEWFRAME_SET[0,OSET,False]
  2538.         MAP_DISPLAY
  2539.         
  2540.         FIGHT_NUMBERBOUNCE[CE,A$]
  2541.         
  2542.         If FIGHT_HP(CE)<1
  2543.           If Not NOKILL : Bob WB,-50,-50, : End If 
  2544.           RATINGS(6)=RATINGS(6)+(FIGHT_ATTACK(CE)+FIGHT_DEFENSE(CE))
  2545.           CASH=CASH+Rnd(FIGHT_ATTACK(CE)+FIGHT_DEFENSE(CE))+2
  2546.           MAP_DISPLAY
  2547.           EDCNT=0
  2548.           Repeat 
  2549.             Add CE,1,0 To ENEMY_MAX
  2550.             If FIGHT_HP(CE)<1 : Inc EDCNT : End If 
  2551.           Until FIGHT_HP(CE)>0 or EDCNT=>ENEMY_MAX
  2552.           If EDCNT=>ENEMY_MAX
  2553.             Goto __BATTLEEND
  2554.           End If 
  2555.         End If 
  2556.         FIGHT_ENEMYWHICH[CE]
  2557.       Else 
  2558.         If FIGHT_CURROPTION=1
  2559.           MX=$FFFF
  2560.         Else 
  2561.           MX=0
  2562.         End If 
  2563.         MZ=-1
  2564.         For I=5 To 261
  2565.           If ITEMHAVE(I)>0
  2566.             If Deek(Start(60)+ITEMHAVE(I)*8+6)=4
  2567.               IHP=Deek(Start(60)+ITEMHAVE(I)*8+2)
  2568.               If FIGHT_CURROPTION=1
  2569.                 If IHP<MX
  2570.                   MX=IHP : MZ=I
  2571.                 End If 
  2572.               Else If FIGHT_CURROPTION=2
  2573.                 If IHP>MX and IHP<RATINGS(1)
  2574.                   MX=IHP : MZ=I
  2575.                 End If 
  2576.               Else If FIGHT_CURROPTION=3
  2577.                 If IHP>MX
  2578.                   MX=IHP : MZ=I
  2579.                 End If 
  2580.               End If 
  2581.             End If 
  2582.           End If 
  2583.         Next 
  2584.         If MZ>-1
  2585.           RATINGS(0)=Min(RATINGS(0)+MX,RATINGS(1))
  2586.           ITEM_REMFROMSPOT[MZ]
  2587.           ITEM_REORG
  2588.           A$="+"+(Str$(MX)-" ")
  2589.           FIGHT_NUMBERBOUNCE[-1,A$]
  2590.         Else 
  2591.           FIGHT_RESPONSE(16)=150
  2592.         End If 
  2593.       End If 
  2594.     End If 
  2595.     
  2596.     For J=0 To ENEMY_MAX
  2597.       If FIGHT_RESPONSE(J)=150 and FIGHT_HP(J)>0
  2598.         CE=ENEMY_CURRMARK
  2599.         FIGHT_ENEMYWHICH[-1]
  2600.         EB=FIGHT_ENEMIES(J)
  2601.         EX=X Bob(EB) : EY=Y Bob(EB)
  2602.         DX=(CHAR_XPOS-4)-EX
  2603.         DY=(CHAR_YPOS+4)-EY
  2604.         
  2605.         NEWFRAME_SET[EB,CHAR_FRAMEBASE(EB)+6,False] : OSET=Param
  2606.         For I=1 To 10
  2607.           HEI=Sin((I*180)/10)*20
  2608.           PX=EX+(DX*I)/10
  2609.           PY=EY+(DY*I)/10-HEI
  2610.           
  2611.           Bob EB,PX,PY,
  2612.           MAP_DISPLAY
  2613.         Next 
  2614.         
  2615.         HIT=FIGHT_ATTACK(J)+FIGHT_DEFENSE(J)
  2616.  
  2617.         If Rnd(HIT_PERCENT)<HIT
  2618.           HISATK=Rnd(0.2*FIGHT_ATTACK(J))+(0.9*FIGHT_ATTACK(J))
  2619.           If Rnd(10)=0
  2620.             HISATK=(HISATK*5)/4
  2621.             S=Screen : Screen 2
  2622.             For I=0 To 31 : Colour I,$FFF : Next 
  2623.             Fade 2 To 0 : Screen S
  2624.           End If 
  2625.  
  2626.           DMG=HISATK-_DEFENSE
  2627.  
  2628.           If DMG>0
  2629.             RATING_GET["HP"]
  2630.             HP=Param-DMG
  2631.             RATING_SET["HP",HP]
  2632.             A$=Str$(DMG)-" "
  2633.           Else 
  2634.             A=HISATK*0.1
  2635.             If A>0
  2636.               DMG=Max(1,Rnd(A))
  2637.             Else 
  2638.               DMG=1
  2639.             End If 
  2640.             RATING_GET["HP"]
  2641.             HP=Param-DMG
  2642.             RATING_SET["HP",HP]
  2643.             A$=Str$(DMG)-" "
  2644.           End If 
  2645.         Else 
  2646.           A$="Missed!"
  2647.           HP=69
  2648.         End If 
  2649.         
  2650.         NEWFRAME_SET[EB,CHAR_FRAMEBASE(EB)+7,False]
  2651.         SOUND_PLAY["RPG:Sounds/fight"+(Str$(ENEMY_GROUP)-" ")+"x.iff",15,8000,236]
  2652.         Repeat 
  2653.           MAP_DISPLAY
  2654.           NEWFRAME_MOVE[EB,False]
  2655.         Until Param
  2656.         MAP_DISPLAY
  2657.         Wait 5
  2658.         NEWFRAME_SET[EB,CHAR_FRAMEBASE(EB)+6,False]
  2659.         
  2660.         NEWFRAME_SET[EB,CHAR_FRAMEBASE(EB)+6,False]
  2661.         
  2662.         For I=10 To 0 Step -1
  2663.           HEI=Sin((I*180)/10)*20
  2664.           PX=EX+(DX*I)/10
  2665.           PY=EY+(DY*I)/10-HEI
  2666.           
  2667.           Bob EB,PX,PY,
  2668.           MAP_DISPLAY
  2669.         Next 
  2670.         FIGHT_RESPONSE(J)=0
  2671.         
  2672.         NEWFRAME_SET[EB,OSET,False]
  2673.         MAP_DISPLAY
  2674.         
  2675.         FIGHT_NUMBERBOUNCE[-1,A$]
  2676.         
  2677.         If HP<1
  2678.           IMDEAD=True
  2679.           Goto __BATTLEEND
  2680.         End If 
  2681.         FIGHT_ENEMYWHICH[CE]
  2682.       End If 
  2683.     Next 
  2684.     
  2685.     If RESP_UPDATE=2
  2686.       For I=0 To ENEMY_MAX
  2687.         FIGHT_RESPONSE(I)=FIGHT_RESPONSE(I)+(FIGHT_CHARGE(I)/2)+Rnd(FIGHT_CHARGE(I)/2)
  2688.         If FIGHT_RESPONSE(I)>150 : FIGHT_RESPONSE(I)=150 : End If 
  2689.       Next 
  2690.       
  2691.       FIGHT_RESPONSE(16)=FIGHT_RESPONSE(16)+(FIGHT_CHARGE(16)/2)+Rnd(FIGHT_CHARGE(16)/2)
  2692.       If FIGHT_RESPONSE(16)>150 : FIGHT_RESPONSE(16)=150 : End If 
  2693.     End If 
  2694.     Add RESP_UPDATE,1,0 To 2
  2695.     FIGHT_SCREENUPDATE
  2696.     SCRNSAVER_KILL
  2697.     SNAPSHOT
  2698.   Loop 
  2699.   
  2700.   __BATTLEEND:
  2701.   If Not IMDEAD
  2702.     Repeat : Until Joy(1)=0
  2703.     NEWFRAME_SET[0,CHAR_FRAMEBASE(0)+4,True]
  2704.     Repeat 
  2705.       MAP_DISPLAY
  2706.       NEWFRAME_MOVE[0,True]
  2707.     Until Param
  2708.     MAP_DISPLAY
  2709.     
  2710.     FIGHT_TEXT["Earned"+Str$(CASH)+" Credits"]
  2711.     T=Timer+200
  2712.     Repeat : Until Joy(1)>0 or Timer>T
  2713.     Repeat : Until Joy(1)=0
  2714.     RATINGS(5)=RATINGS(5)+CASH
  2715.     
  2716.     Proc RATING_NEXTUP : NXTUP=Param
  2717.     If RATINGS(6)=>NXTUP
  2718.       PTS=11 : RPTS=4 : I=1
  2719.       Repeat 
  2720.         If I=1
  2721.           If Rnd(1)=0
  2722.             RATINGS(1)=RATINGS(1)+1
  2723.             PTS=PTS-1
  2724.           End If 
  2725.         Else 
  2726.           If Rnd(5)=0 and RPTS>0
  2727.             RATINGS(I)=RATINGS(I)+1
  2728.             PTS=PTS-1
  2729.             RPTS=RPTS-1
  2730.           End If 
  2731.         End If 
  2732.         Add I,1,1 To 4
  2733.       Until PTS=0
  2734.  
  2735.       FIGHT_TEXT["Level Up!! "+Str$(7+RPTS)+" HP Gained!"]
  2736.       T=Timer+200
  2737.       Repeat : Until Joy(1)>0 or Timer>T
  2738.       Repeat : Until Joy(1)=0
  2739.       
  2740.       RATINGS(6)=RATINGS(6)-NXTUP
  2741.     End If 
  2742.   Else 
  2743.     Wait 60
  2744.   End If 
  2745.   Bob Off 64
  2746.   Screen 0
  2747.   Erase 236
  2748. End Proc
  2749. Procedure FIGHT_NUMBERBOUNCE[WHICH,TXT$]
  2750.   On Error Proc INEXT_ERRORTRAP
  2751.   S=Screen : Screen 2
  2752.   If WHICH=-1
  2753.     X=X Bob(0)-MAP_XPOS
  2754.     Y=Y Bob(0)-MAP_YPOS
  2755.   Else 
  2756.     X=X Bob(FIGHT_ENEMIES(WHICH))-MAP_XPOS
  2757.     Y=Y Bob(FIGHT_ENEMIES(WHICH))-MAP_YPOS
  2758.   End If 
  2759.   
  2760.   D=8 : L=Text Length(TXT$)
  2761.   L=L/2
  2762.   Screen Copy Physic To Logic
  2763.   DX=(X-L) and $FFF8
  2764.   DY=Y-28
  2765.   If DX+(L*2)+8>312 : DX=312-((L*2)+8) : End If 
  2766.   If DX<0 : DX=0 : End If 
  2767.   If DY<0 : DY=0 : End If 
  2768.   If DY+38>199 : DY=161 : End If 
  2769.   Get Block 400,DX,DY,L*2+8,38,1
  2770.   Repeat 
  2771.     For I=D To 0 Step -1
  2772.       Ink 0 : Text X-L-1,Y-8-I,TXT$
  2773.       Text X-L+1,Y-8-I,TXT$
  2774.       Ink 31 : Text X-L,Y-8-I,TXT$
  2775.       Screen Swap : Extension_18_0A50 VB_LINE
  2776.       Put Block 400
  2777.     Next 
  2778.     D=D/2
  2779.   Until D=0
  2780.   Wait 25
  2781.   Put Block 400
  2782.   Screen Swap : Extension_18_0A50 VB_LINE
  2783.   Screen S
  2784. End Proc
  2785. Procedure FIGHT_ENEMYWHICH[WHICH]
  2786.   On Error Proc INEXT_ERRORTRAP
  2787.   Shared ENEMY_CURRMARK
  2788.   S=Screen : Screen 2
  2789.   
  2790.   MAP_DISPLAY
  2791.   
  2792.   'Screen Copy Physic To Logic 
  2793.   Autoback 1
  2794.   
  2795.   'If ENEMY_CURRMARK>-1
  2796.   '  BW=Deek(Sprite Base(I Bob(FIGHT_ENEMIES(ENEMY_CURRMARK))))*8
  2797.   '  BH=Deek(Sprite Base(I Bob(FIGHT_ENEMIES(ENEMY_CURRMARK)))+2)
  2798.   '  BX=X Bob(FIGHT_ENEMIES(ENEMY_CURRMARK))-MAP_XPOS
  2799.   '  BY=Y Bob(FIGHT_ENEMIES(ENEMY_CURRMARK))-MAP_YPOS
  2800.   '  'Box BX-BW,BY-BH To BX+BW,BY  
  2801.   '  ENEMY_CURRMARK=-1 
  2802.   'End If  
  2803.   If WHICH>-1
  2804.     BW=Deek(Sprite Base(I Bob(FIGHT_ENEMIES(WHICH))))*8
  2805.     BH=Deek(Sprite Base(I Bob(FIGHT_ENEMIES(WHICH)))+2)
  2806.     BX=X Bob(FIGHT_ENEMIES(WHICH))-MAP_XPOS
  2807.     BY=Y Bob(FIGHT_ENEMIES(WHICH))-MAP_YPOS
  2808.     DPOINTER[BX-BW-16,BY-(BH/2)-8]
  2809.     'Plot BX-BW,BY-BH
  2810.     'Box BX-BW,BY-BH To BX+BW,BY 
  2811.     ENEMY_CURRMARK=WHICH
  2812.   End If 
  2813.   
  2814.   Autoback 0
  2815.   Screen S
  2816.   
  2817. End Proc
  2818.  
  2819. Procedure JS_WAIT
  2820.   On Error Proc INEXT_ERRORTRAP
  2821.   Repeat : Until Joy(1)=0
  2822. End Proc
  2823.  
  2824. Procedure NEWFRAME_SETUP
  2825.   Shared FRAMES_MAX,PIC_POINTER
  2826.   On Error Proc INEXT_ERRORTRAP
  2827.   Reserve As Work 66,64000
  2828.   FRAME_PTR=Start(66)
  2829.   Reserve As Work 43,2048
  2830.   Reserve As Work 26,4096
  2831.   Open In 3,"frames.data"
  2832.   Set Input 10,-1
  2833.   Line Input #3,FRAMES_FILE$
  2834.   CFP=0
  2835.   Repeat 
  2836.     Line Input #3,A$
  2837.     If Not Eof(3)
  2838.       A= Extension_10_0512(A$)
  2839.       F=Val( Extension_10_0520(1,A$))
  2840.       C=Val( Extension_10_0520(2,A$))
  2841.       Doke FRAME_PTR+1024+F*2,CFP
  2842.       Q=CFP : CFP=CFP+2
  2843.       TF=-1
  2844.       For I=3 To A
  2845.         D=Val( Extension_10_0520(I,A$))
  2846.         If D>0
  2847.           Doke FRAME_PTR+9216+CFP,D
  2848.           CFP=CFP+2 : TF=TF+1
  2849.         End If 
  2850.       Next 
  2851.       Doke FRAME_PTR+9216+Q,TF
  2852.       Doke FRAME_PTR+9216+CFP,C : CFP=CFP+2
  2853.       If F>FRAMES_MAX
  2854.         FRAMES_MAX=F
  2855.       End If 
  2856.       If F=4090
  2857.         PIC_POINTER=Val( Extension_10_0520(3,A$))
  2858.       End If 
  2859.     End If 
  2860.   Until Eof(3)
  2861.   Close 3
  2862.   Amos To Front 
  2863.   Load "FrameInfo.bin",43
  2864.   'Open In 3,FRAMES_FILE$
  2865.   'CPOS=86 : EPOS=Lof(3) 
  2866.   'C=1 : N=Start(43)+4 
  2867.   'Repeat  
  2868.   '  Loke N,CPOS : N=N+4 
  2869.   '  Pof(3)=CPOS+4 
  2870.   '  CPOS=CPOS+6+Elword(Input$(3,2)) 
  2871.   '  Pof(3)=CPOS 
  2872.   'Until CPOS=>EPOS
  2873.   'Save "FrameInfo.bin",43 
  2874.   'Close 3 
  2875. End Proc
  2876. Procedure NEWFRAME_RESET
  2877.   On Error Proc INEXT_ERRORTRAP
  2878.   FRAMES_LOAD$=""
  2879. End Proc
  2880. Procedure NEWFRAME_SET[CHAR,WHICH,RV]
  2881.   'On Error Proc INEXT_ERRORTRAP 
  2882.   FP=Deek(FRAME_PTR+1024+WHICH*2)
  2883.   FM=Deek(FRAME_PTR+9216+FP)
  2884.   If Not RV
  2885.     Doke FRAME_PTR+CHAR*4,0
  2886.     CB=0
  2887.   Else 
  2888.     Doke FRAME_PTR+CHAR*4,FM
  2889.     CB=FM
  2890.   End If 
  2891.   OSET=Deek(FRAME_PTR+CHAR*4+2)
  2892.   Doke FRAME_PTR+CHAR*4+2,WHICH
  2893.   CB=Deek(FRAME_PTR+9218+FP+(CB*2))
  2894.   FRAME_NEWCHECK[CB]
  2895.   C=Deek(FRAME_PTR+9218+FP+((FM+1)*2))
  2896.   If C=2
  2897.     CB=Hrev(CB)
  2898.   Else If C=3
  2899.     CB=Vrev(CB)
  2900.   End If 
  2901.   Bob CHAR,,,CB
  2902.   'FRAME_DIDCHANGE(CHAR)=True
  2903. End Proc[OSET]
  2904. Procedure NEWFRAME_LOOP[CHAR,RV]
  2905.   On Error Proc INEXT_ERRORTRAP
  2906.   NEWFRAME_MOVE[CHAR,RV]
  2907.   If Param
  2908.     FS=Deek(FRAME_PTR+CHAR*4+2)
  2909.     NEWFRAME_SET[CHAR,FS,RV]
  2910.   End If 
  2911. End Proc
  2912. Procedure NEWFRAME_MOVE[CHAR,RV]
  2913.   On Error Proc INEXT_ERRORTRAP
  2914.   CF=Deek(FRAME_PTR+CHAR*4)
  2915.   FS=Deek(FRAME_PTR+CHAR*4+2)
  2916.   FP=Deek(FRAME_PTR+1024+FS*2)
  2917.   FM=Deek(FRAME_PTR+9216+FP)
  2918.   C=Deek(FRAME_PTR+9218+FP+((FM+1)*2))
  2919.   If RV
  2920.     If CF=0
  2921.       EF=True
  2922.     Else 
  2923.       CF=CF-1
  2924.     End If 
  2925.   Else 
  2926.     If CF=FM
  2927.       EF=True
  2928.     Else 
  2929.       CF=CF+1
  2930.     End If 
  2931.   End If 
  2932.   Doke FRAME_PTR+CHAR*4,CF
  2933.   CB=Deek(FRAME_PTR+9218+FP+(CF*2))
  2934.   FRAME_NEWCHECK[CB]
  2935.   If C=2
  2936.     CB=Hrev(CB)
  2937.   Else If C=3
  2938.     CB=Vrev(CB)
  2939.   End If 
  2940.   Bob CHAR,,,CB
  2941. End Proc[EF]
  2942. Procedure NEWFRAME_CHANGE[CHAR]
  2943.   On Error Proc INEXT_ERRORTRAP
  2944.   FS=Deek(FRAME_PTR+CHAR*4+2)
  2945.   FP=Deek(FRAME_PTR+1024+FS*2)
  2946.   FM=Deek(FRAME_PTR+9216+FP)
  2947.   C=Deek(FRAME_PTR+9218+FP+((FM+1)*2))
  2948. End Proc[C=1]
  2949. Procedure NEWFRAME_CURRFRAMESET[CHAR]
  2950.   FS=Deek(FRAME_PTR+CHAR*4+2)
  2951. End Proc[FS]
  2952. Procedure NEWFRAME_FULLREQUEST
  2953.   S=Start(43) : SNOPEN=False
  2954.   Open In 3,FRAMES_FILE$
  2955.   For J=1 To Len(FRAMES_LOAD$) Step 2
  2956.     WHICH= Extension_16_04F8(Mid$(FRAMES_LOAD$,J,2))
  2957.     FP=Deek(FRAME_PTR+1024+WHICH*2)
  2958.     FM=Deek(FRAME_PTR+9216+FP)
  2959.     For I=0 To FM
  2960.       F=Deek(FRAME_PTR+9218+FP+(I*2))
  2961.       If Peek(Start(26)+F)<>255
  2962.         If SNOPEN=False
  2963.           T=Screen
  2964.           Screen Open 6,320,200,64,Lowres
  2965.           Screen Hide 6
  2966.           SNOPEN=True
  2967.         End If 
  2968.         A=Leek(S+F*4)
  2969.         If A>0
  2970.           POS=Leek(Start(43)+F*4)
  2971.           Pof(3)=POS
  2972.           SW= Extension_16_04F8(Input$(3,2))
  2973.           SH= Extension_16_04F8(Input$(3,2))
  2974.           SS= Extension_16_04F8(Input$(3,2))
  2975.           Reserve As Work 12,SS
  2976.           Sload 3 To 12,SS
  2977.           Unpack 12,0,0
  2978.           Erase 12
  2979.           'Unpack A+6,0,0
  2980.           Get Bob F,0,0 To SW,SH
  2981.           Hot Spot F,$12
  2982.           Poke Start(26)+F,255
  2983.         End If 
  2984.       End If 
  2985.       Poke Start(25)+F,255
  2986.     Next 
  2987.   Next 
  2988.   Close 3
  2989.   If SNOPEN
  2990.     Screen Close 6
  2991.     Screen T
  2992.   End If 
  2993. End Proc
  2994. Procedure NEWFRAME_GRABSET[WHICH]
  2995.   On Error Proc INEXT_ERRORTRAP
  2996.   FRAMES_LOAD$=FRAMES_LOAD$+ Extension_16_04EA(WHICH)
  2997. End Proc
  2998. Procedure FRAMES_CHECKSETUP
  2999.   On Error Proc INEXT_ERRORTRAP
  3000.   Reserve As Work 25,4096
  3001. End Proc
  3002. Procedure FRAME_NEWCHECK[F]
  3003.   On Error Proc INEXT_ERRORTRAP
  3004.   If Peek(Start(26)+F)<>255
  3005.     A=Leek(Start(43)+F*4)
  3006.     If A>0
  3007.       T=Screen
  3008.       Screen Open 6,320,200,64,Lowres
  3009.       Screen Hide 6
  3010.       Open In 3,FRAMES_FILE$
  3011.       POS=Leek(Start(43)+F*4)
  3012.       D=(D+5) mod 191
  3013.       Pof(3)=POS
  3014.       SW= Extension_16_04F8(Input$(3,2))
  3015.       SH= Extension_16_04F8(Input$(3,2))
  3016.       SS= Extension_16_04F8(Input$(3,2))
  3017.       Reserve As Work 12,SS
  3018.       Sload 3 To 12,SS
  3019.       Close 3
  3020.       Unpack 12,0,0
  3021.       Erase 12
  3022.       'Unpack A+6,0,0
  3023.       Get Bob F,0,0 To SW,SH
  3024.       Hot Spot F,$12
  3025.       Poke Start(26)+F,255
  3026.       Screen Close 6
  3027.       Screen T
  3028.     End If 
  3029.   End If 
  3030.   Poke Start(25)+F,255
  3031. End Proc
  3032. Procedure FRAMES_HOUSEKEEPING
  3033.   On Error Proc INEXT_ERRORTRAP
  3034.   S=Start(25)
  3035.   For I=1 To 4095
  3036.     If Peek(S+I)=0
  3037.       If Peek(Start(26)+I)=255
  3038.         Del Bob I : Ins Bob I
  3039.         Poke Start(26)+I,0
  3040.       End If 
  3041.     End If 
  3042.   Next 
  3043. End Proc
  3044.  
  3045. Procedure DPOINTER[X,Y]
  3046.   Shared PIC_POINTER
  3047.   Paste Bob X,Y,PIC_POINTER
  3048. End Proc
  3049.  
  3050. Procedure LEVEL_CHECK
  3051.   On Error Proc INEXT_ERRORTRAP
  3052.   If LEVEL_LOADNOW$<>""
  3053.     MAP_FRONTCLOSE
  3054.     LEVEL_LOAD[LEVEL_LOADNOW$]
  3055.     LEVEL_LOADNOW$=""
  3056.   End If 
  3057. End Proc
  3058. Procedure LEVEL_LOAD[FILE$]
  3059.   On Error Proc INEXT_ERRORTRAP
  3060.   Shared MUS_NOPLAY,PIC_POINTER
  3061.   
  3062.   Open In 4,"levels/"+FILE$
  3063.   Set Input 10,-1
  3064.   Bob Off 
  3065.   If EFFECT_SETTINGS(0)>0
  3066.     Trap Del Block 200
  3067.   End If 
  3068.   EFFECT_SETTINGS(0)=0
  3069.   CONTROLLOCK=False
  3070.   WALKTHRUWALLS=False
  3071.   SCRIPT_PREP
  3072.   MAP_ZONERESET
  3073.   FRAMES_CHECKSETUP
  3074.   NEWFRAME_RESET
  3075.   CZ=0 : MP$=""
  3076.   
  3077.   Repeat 
  3078.     Line Input #4,A$
  3079.     B$=A$-" "
  3080.     If B$<>""
  3081.       If B$="|MAPZ|"
  3082.         MD=0
  3083.       Else If B$="|CHARZ|"
  3084.         MD=1
  3085.       Else If B$="|ZONEZ|"
  3086.         MD=2
  3087.       Else If B$="|COMMENTZ|"
  3088.         MD=3
  3089.       Else If B$="|EFFECTZ|"
  3090.         MD=4
  3091.       Else If B$="|MUSIL|"
  3092.         MD=5
  3093.       Else If B$="|NAMEZ|"
  3094.         MD=6
  3095.       Else If B$="|DELAYZ|"
  3096.         NOFRONTFADE=True
  3097.       Else 
  3098.         If MD=0
  3099.           MP$= Extension_18_006A(A$)
  3100.         Else If MD=1
  3101.           SC$="scripts/"+ Extension_10_0520(1,A$)
  3102.           X=Val( Extension_10_0520(2,A$))
  3103.           Y=Val( Extension_10_0520(3,A$))
  3104.           F=Val( Extension_10_0520(4,A$))
  3105.           V=Val( Extension_10_0520(5,A$))
  3106.           S=Val( Extension_10_0520(6,A$))
  3107.           'FRAMES_CHECK[F] 
  3108.           CHAR_SET[SC$,X,Y,F,V,S]
  3109.         Else If MD=2
  3110.           A= Extension_10_0512(A$)
  3111.           TP$=Upper$( Extension_10_0520(1,A$))
  3112.           If TP$="STOP"
  3113.             T=0
  3114.           Else If TP$="SLOW"
  3115.             T=1
  3116.           Else If TP$="LEVEL"
  3117.             T=2
  3118.           Else If TP$="FIGHT"
  3119.             T=3
  3120.           Else If TP$="LABELJUMP"
  3121.             T=4
  3122.           End If 
  3123.           X1=Val( Extension_10_0520(2,A$))
  3124.           Y1=Val( Extension_10_0520(3,A$))
  3125.           X2=Val( Extension_10_0520(4,A$))
  3126.           Y2=Val( Extension_10_0520(5,A$))
  3127.           MAP_ZONESET[CZ,X1,Y1,X2,Y2,T]
  3128.           If A>5
  3129.             If A>9 : A=9 : End If 
  3130.             For I=6 To A
  3131.               MAP_ZONESETVAR[CZ,I-6,Val( Extension_10_0520(I,A$))]
  3132.             Next 
  3133.           End If 
  3134.           Inc CZ
  3135.         Else If MD=4
  3136.           A= Extension_10_0512(A$)-1
  3137.           If A>-1
  3138.             For I=0 To A
  3139.               EFFECT_SETTINGS(I)=Val( Extension_10_0520(I+1,A$))
  3140.             Next 
  3141.           End If 
  3142.         Else If MD=5
  3143.           If A$<>""
  3144.             A$="mods/"+A$
  3145.             If Exist(A$)
  3146.               NEWMOD$=Upper$(A$)
  3147.             Else 
  3148.               INEXT_ERROR["Cannot Find .mod File","",A$]
  3149.             End If 
  3150.           End If 
  3151.         Else If MD=6
  3152.           CHAR_NAME$= Extension_18_006A(A$)
  3153.         End If 
  3154.         
  3155.       End If 
  3156.       If MD<>0 and MP$<>""
  3157.         MAP_SCREENLOAD["maps/"+MP$] : MP$=""
  3158.       End If 
  3159.     End If 
  3160.   Until Eof(4)
  3161.   Close 4
  3162.   
  3163.   NEWFRAME_FULLREQUEST
  3164.   
  3165.   If Exist("scripts/globalscript.script")
  3166.     CHAR_SET["scripts/globalscript.script",-49,-49,0,0,0]
  3167.   End If 
  3168.   
  3169.   If Not MUS_NOPLAY
  3170.     If NEWMOD$<>CURRMOD$
  3171.       Erase 33
  3172.       If NEWMOD$<>""
  3173.          Extension_19_0006 "RPG:"+NEWMOD$,33
  3174.          Extension_19_0028 33
  3175.       End If 
  3176.       CURRMOD$=NEWMOD$
  3177.     End If 
  3178.   End If 
  3179.   
  3180.   If LEVEL_SKIPCHARXY
  3181.     Bob 0,CHAR_XPOS,CHAR_YPOS,
  3182.   Else 
  3183.     CHAR_XPOS=X Bob(0) : CHAR_YPOS=Y Bob(0)
  3184.   End If 
  3185.   LEVEL_SKIPCHARXY=False
  3186.   EFFECT_SETUP
  3187.   CLR_SETUP
  3188.   
  3189.   FRAME_NEWCHECK[PIC_POINTER]
  3190.   FRAMES_HOUSEKEEPING
  3191.   
  3192.   CURRLEVEL$=FILE$
  3193.   
  3194.   DISPLAY_SHOW=True
  3195.   If Not NOFRONTFADE
  3196.     MAP_FRONTFADEIN
  3197.   End If 
  3198.   NOFRONTFADE=False
  3199. End Proc
  3200.  
  3201. Procedure SCRNSAVER
  3202.   On Error Proc INEXT_ERRORTRAP
  3203.   If SSVTIMER=0
  3204.     SSVTIMER=Timer+9000
  3205.   Else 
  3206.     If Joy(1)>0
  3207.       SSVTIMER=Timer+9000
  3208.     Else 
  3209.       If Timer>SSVTIMER
  3210.         BLUEUP=True : GREENUP=True : REDUP=True
  3211.         SC=-1
  3212.         Repeat 
  3213.           Inc SC
  3214.           Trap Screen SC
  3215.         Until Errtrap>0 or SC=8
  3216.         If SC<8
  3217.           S=Screen
  3218.           SW=320 : SH=200 : RES=Lowres
  3219.           Screen Open SC,SW,SH,2,RES : Flash Off : Curs Off : Cls 0
  3220.           Palette $0,$333
  3221.           
  3222.           Reserve As Work 256,176
  3223.           For I=0 To 3
  3224.             Repeat 
  3225.               DX=32757+Rnd(20)
  3226.               DY=32757+Rnd(20)
  3227.             Until DX<>32767 and DY<>32767
  3228.             Doke Start(256)+(I*4),DX
  3229.             Doke Start(256)+(I*4)+2,DX
  3230.             SX=Rnd(SW-1) : SY=Rnd(SH-1)
  3231.             For J=0 To 9
  3232.               Doke Start(256)+16+(J*8)+(I*4),SX
  3233.               Doke Start(256)+18+(J*8)+(I*4),SY
  3234.             Next 
  3235.           Next 
  3236.           
  3237.           Repeat 
  3238.             For J=0 To 1
  3239.               Ink 1-J
  3240.               For I=0 To 3
  3241.                 SX=Deek(Start(256)+16+(J*144)+I*4)
  3242.                 SY=Deek(Start(256)+18+(J*144)+I*4)
  3243.                 If I=0
  3244.                   Gr Locate SX,SY
  3245.                   OSX=SX : OSY=SY
  3246.                 Else 
  3247.                   Draw To SX,SY
  3248.                 End If 
  3249.               Next 
  3250.               Draw To OSX,OSY
  3251.             Next 
  3252.             
  3253.             Copy Start(256)+16,Start(256)+160 To Start(256)+32
  3254.             
  3255.             For I=0 To 3
  3256.               SX=Deek(Start(256)+32+I*4)
  3257.               SY=Deek(Start(256)+34+I*4)
  3258.               DX=Deek(Start(256)+I*4)-32767
  3259.               DY=Deek(Start(256)+2+I*4)-32767
  3260.               SX=SX+DX : SY=SY+DY
  3261.               CHDIR=False
  3262.               If SX<1
  3263.                 SX=1 : CHDIR=True
  3264.               Else If SX>SW-2
  3265.                 SX=SW-2 : CHDIR=True
  3266.               End If 
  3267.               If SY<1
  3268.                 SY=1 : CHDIR=True
  3269.               Else If SY>SH-2
  3270.                 SY=SH-2 : CHDIR=True
  3271.               End If 
  3272.               
  3273.               Doke Start(256)+16+I*4,SX
  3274.               Doke Start(256)+18+I*4,SY
  3275.               
  3276.               If CHDIR
  3277.                 Repeat 
  3278.                   DX=32757+Rnd(20)
  3279.                   DY=32757+Rnd(20)
  3280.                 Until DX<>32767 and DY<>32767
  3281.                 Doke Start(256)+I*4,DX
  3282.                 Doke Start(256)+2+I*4,DY
  3283.               End If 
  3284.             Next 
  3285.             
  3286.             C=Colour(1)
  3287.             R=(C and $F00)/256
  3288.             G=(C and $F0)/16
  3289.             B=C and $F
  3290.             If BLUEUP
  3291.               B=B+1
  3292.             Else 
  3293.               B=B-1
  3294.             End If 
  3295.             If B=15 or B=3
  3296.               BLUEUP= Not BLUEUP
  3297.               If GREENUP
  3298.                 G=G+1
  3299.               Else 
  3300.                 G=G-1
  3301.               End If 
  3302.               If G=15 or G=3
  3303.                 GREENUP= Not GREENUP
  3304.                 If REDUP
  3305.                   R=R+1
  3306.                 Else 
  3307.                   R=R-1
  3308.                 End If 
  3309.                 If R=15 or R=3
  3310.                   REDUP= Not REDUP
  3311.                 End If 
  3312.               End If 
  3313.             End If 
  3314.             
  3315.             C=R*256+G*16+B
  3316.             Colour 1,C
  3317.              Extension_18_0A50 VB_LINE
  3318.           Until Joy(1)<>0 or Inkey$<>""
  3319.           SSVTIMER=Timer+9000
  3320.           Screen Close SC
  3321.           Screen S
  3322.         End If 
  3323.       End If 
  3324.     End If 
  3325.   End If 
  3326. End Proc
  3327. Procedure SCRNSAVER_KILL
  3328.   SSVTIMER=Timer+9000
  3329. End Proc
  3330. Procedure XPK_BANKUNPACK[FILE$,BANK]
  3331.   On Error Proc INEXT_ERRORTRAP
  3332.   If Instr(FILE$,":")=0
  3333.     FILE$=Dir$+FILE$
  3334.   End If 
  3335.   XPK_USERBASE=$80005850
  3336.   XPK_UNPACK=-48
  3337.   XPK_EXAMINE=-36
  3338.   XPK_INNAME=XPK_USERBASE+$1
  3339.   XPK_OUTBUF=XPK_USERBASE+$12
  3340.   XPK_OUTBUFLEN=XPK_USERBASE+$21
  3341.   
  3342.   For I=12 To 400
  3343.     If Length(I)=0 and I<>BANK
  3344.       B=I : I=400
  3345.     End If 
  3346.   Next 
  3347.   Reserve As Work B,256
  3348.   
  3349.   FILE$=FILE$+Chr$(0)
  3350.   
  3351.   Lib Open 1,"xpkmaster.library",0
  3352.   CNT=0
  3353.   Repeat 
  3354.     A$= Extension_16_04CE(XPK_INNAME)+ Extension_16_04CE(Varptr(FILE$))
  3355.     A$=A$+String$(Chr$(0),9)
  3356.     Areg(0)=Start(B) : Areg(1)=Varptr(A$)
  3357.     A=Lib Call(1,XPK_EXAMINE)
  3358.     CNT=CNT+1
  3359.     'Print A 
  3360.   Until A=0 or CNT=20
  3361.   If CNT=20
  3362.     INEXT_ERROR["","XPK Unpacking Error",""]
  3363.   End If 
  3364.   OSIZE=Leek(Start(B)+4)
  3365.   
  3366.   CNT=0
  3367.   Repeat 
  3368.     Erase BANK : Reserve As Work BANK,OSIZE+256
  3369.     A$= Extension_16_04CE(XPK_INNAME)+ Extension_16_04CE(Varptr(FILE$))
  3370.     A$=A$+ Extension_16_04CE(XPK_OUTBUF)+ Extension_16_04CE(Start(BANK)-12)
  3371.     A$=A$+ Extension_16_04CE(XPK_OUTBUFLEN)+ Extension_16_04CE(OSIZE+268)
  3372.     A$=A$+String$(Chr$(0),9)
  3373.     
  3374.     Areg(0)=Varptr(A$)
  3375.     A=Lib Call(1,XPK_UNPACK)
  3376.     CNT=CNT+1
  3377.   Until A=0 or CNT=20
  3378.   If CNT=20
  3379.     INEXT_ERROR["","XPK Unpacking Error",""]
  3380.   End If 
  3381.   
  3382.   Bank Shrink BANK To OSIZE-12
  3383.   Lib Close 1
  3384. End Proc
  3385.  
  3386. Procedure SOUND_PLAY[FILE$,VOC,FREQ,BANK]
  3387.   On Error Proc INEXT_ERRORTRAP
  3388.   If Exist(FILE$)
  3389.     Open In 6,FILE$
  3390.     Erase BANK
  3391.     Reserve As Chip Work BANK,Lof(6)
  3392.     Sload 6 To BANK,Lof(6)
  3393.     Close 6
  3394.     Sam Raw VOC,Start(BANK)+72,Length(BANK)-72,FREQ
  3395.     Repeat : Until Sam Swapped(0)<>0
  3396.   End If 
  3397. End Proc
  3398.  
  3399. Procedure GAME_SAVE[FILENAME$]
  3400.   On Error Proc INEXT_ERRORTRAP
  3401.   If FILENAME$<>""
  3402.     Open Out 4,FILENAME$
  3403.     Print #4,"RPGSAVE!";Chr$(10);
  3404.     
  3405.     'Char & Map Positions
  3406.     Print #4,CURRLEVEL$;Chr$(10);
  3407.     Print #4, Extension_16_04CE(CHAR_XPOS); Extension_16_04CE(CHAR_YPOS);
  3408.     Print #4, Extension_16_04CE(MAP_XPOS); Extension_16_04CE(MAP_YPOS);
  3409.     Print #4, Extension_16_04CE(CONTROLLOCK); Extension_16_04CE(WALKTHRUWALLS);
  3410.     
  3411.     'Global Variables
  3412.     For I=0 To 255
  3413.       Print #4, Extension_16_04CE(Leek(Start(58)+(I*4)));
  3414.     Next 
  3415.     
  3416.     'Enemy Positions, Script Positions, Variables
  3417.     Print #4, Extension_16_04CE(SCR_MAX);
  3418.     
  3419.     For I=0 To SCR_MAX
  3420.       Print #4, Extension_16_04CE(X Bob(I)); Extension_16_04CE(Y Bob(I));
  3421.       Print #4, Extension_16_04CE(Leek(Start(67)+(I*12)+8));
  3422.       For J=0 To 63
  3423.         Print #4, Extension_16_04CE(Leek(Start(68)+(I*256)+(J*4)));
  3424.       Next 
  3425.       For J=0 To 3
  3426.         Print #4, Extension_16_04CE(SCRIPT_CURRCOMMAND(I,J));
  3427.       Next 
  3428.     Next 
  3429.     
  3430.     'Ratings & Items 
  3431.     For I=0 To 6
  3432.       Print #4, Extension_16_04CE(RATINGS(I));
  3433.     Next 
  3434.  
  3435.     MZ=-1
  3436.     For I=0 To 261
  3437.       If ITEMHAVE(I)>0 : MZ=I : End If 
  3438.     Next 
  3439.     Print #4, Extension_16_04CE(MZ);
  3440.     For I=0 To MZ
  3441.       Print #4, Extension_16_04CE(ITEMHAVE(I));
  3442.     Next 
  3443.     Close 4
  3444.   End If 
  3445. End Proc
  3446. Procedure GAME_LOAD[FILENAME$]
  3447.   On Error Proc INEXT_ERRORTRAP
  3448.   If FILENAME$<>"" : If Exist(FILENAME$)
  3449.       NOFRONTFADE=True
  3450.       Open In 5,FILENAME$
  3451.       Set Input 10,-1
  3452.       Line Input #5,A$
  3453.       If A$="RPGSAVE!"
  3454.         
  3455.         'Char & Map Positions
  3456.         Line Input #5,CURRLEVEL$
  3457.         LEVEL_LOADNOW$=CURRLEVEL$
  3458.         LEVEL_CHECK
  3459.         
  3460.         CHAR_XPOS= Extension_16_04DC(Input$(5,4))
  3461.         CHAR_YPOS= Extension_16_04DC(Input$(5,4))
  3462.         MAP_XPOS= Extension_16_04DC(Input$(5,4))
  3463.         MAP_YPOS= Extension_16_04DC(Input$(5,4))
  3464.         CONTROLLOCK= Extension_16_04DC(Input$(5,4))
  3465.         WALKTHRUWALLS= Extension_16_04DC(Input$(5,4))
  3466.         
  3467.         'Global Variables
  3468.         For I=0 To 255
  3469.           Loke(Start(58)+(I*4)), Extension_16_04DC(Input$(5,4))
  3470.         Next 
  3471.         
  3472.         'Enemy Positions, Script Positions, Variables
  3473.         SCR_MAX= Extension_16_04DC(Input$(5,4))
  3474.         
  3475.         For I=0 To SCR_MAX
  3476.           X= Extension_16_04DC(Input$(5,4)) : Y= Extension_16_04DC(Input$(5,4)) : Bob I,X,Y,
  3477.           Loke Start(67)+(I*12)+8, Extension_16_04DC(Input$(5,4))
  3478.           For J=0 To 63
  3479.             Loke Start(68)+(I*256)+(J*4), Extension_16_04DC(Input$(5,4))
  3480.           Next 
  3481.           For J=0 To 3
  3482.             SCRIPT_CURRCOMMAND(I,J)= Extension_16_04DC(Input$(5,4))
  3483.           Next 
  3484.         Next 
  3485.         
  3486.         'Ratings & Items 
  3487.         For I=0 To 6
  3488.           RATINGS(I)= Extension_16_04DC(Input$(5,4))
  3489.         Next 
  3490.         
  3491.         For I=0 To 255
  3492.           ITEMHAVE(I)=0
  3493.         Next 
  3494.         MZ= Extension_16_04DC(Input$(5,4))
  3495.         For I=0 To MZ
  3496.           ITEMHAVE(I)= Extension_16_04DC(Input$(5,4))
  3497.         Next 
  3498.         MAP_FRONTFADEIN
  3499.       End If 
  3500.       Close 5
  3501.   End If : End If 
  3502. End Proc
  3503.  
  3504. Procedure INEXT_ERRORTRAP
  3505.   Error Errn
  3506.   A$=Resource$(-(5001+Errn))
  3507.   INEXT_ERROR["Internal Error","",A$]
  3508. End Proc
  3509. Procedure INEXT_ERROR[L1$,L2$,L3$]
  3510.   Shared ERR_FILE$
  3511.   Erase All 
  3512.   Amos To Back 
  3513.   Amos Lock 
  3514.   Load ERR_FILE$
  3515.    Extension_24_02DE 
  3516.    Extension_24_0018 0,1,20
  3517.   'Gui Paste Bob 1,4,20
  3518.    Extension_24_009E 0,1,0,Varptr(L1$)
  3519.    Extension_24_009E 0,2,0,Varptr(L2$)
  3520.    Extension_24_009E 0,3,0,Varptr(L3$)
  3521.   T=Timer+200
  3522.   Repeat 
  3523.     A= Extension_24_0484 
  3524.      Extension_24_02F6 
  3525.   Until Timer>T or A=-1 or A=4
  3526.   A= Extension_24_0042(0)
  3527.   Erase All 
  3528.   Amos Unlock 
  3529.   End 
  3530. End Proc
  3531.  
  3532. Procedure FULLINTRO
  3533. Hide 
  3534. _INTRO
  3535. T=Timer+200
  3536. Repeat : Until Fire(1) or Timer>T
  3537. _INTRO_CLOSE
  3538. _MAINMENU
  3539. C=Param
  3540. End Proc[C]
  3541. Procedure _INTRO
  3542. Load "MainMenu_1.spk",512
  3543. Load "MainMenu_2.spk",513
  3544. Unpack 512 To 6 : Screen Hide 6 : Erase 512
  3545. Screen Open 7,320,200,4096,Lowres : Flash Off : Curs Off : Cls 0
  3546. Get Palette 6
  3547. For I=0 To 99
  3548.   Screen Copy 6,0,I*2,320,(I*2)+1 To 7,0,I*2
  3549.   Screen Copy 6,0,199-(I*2),320,200-(I*2) To 7,0,199-(I*2)
  3550.   If(I and 3)=0 : Wait Vbl : End If 
  3551. Next 
  3552. Screen Close 6
  3553. End Proc
  3554. Procedure _INTRO_CLOSE
  3555. Screen 7
  3556. For I=0 To 99
  3557.   Cls 0,0,I*2 To 320,(I*2)+1
  3558.   Cls 0,0,199-(I*2) To 320,200-(I*2)
  3559.   If(I and 3)=0 : Wait Vbl : End If 
  3560. Next 
  3561. Screen Close 7
  3562. End Proc
  3563. Procedure _MAINMENU
  3564. Dim BCOORDS(3,3)
  3565. For X=0 To 3
  3566.   For Y=0 To 3
  3567.     Read BCOORDS(X,Y)
  3568.   Next 
  3569. Next 
  3570. Unpack 513 To 6 : Screen Hide 6 : Erase 513
  3571. Screen Open 7,320,200,16,Lowres : Flash Off : Curs Off : Cls 0
  3572. Screen To Front 7
  3573. For I=0 To 15 : Colour I,0 : Next 
  3574. Screen Copy 6 To 7
  3575. Fade 2 To 6 : Screen Close 6
  3576. Wait 30
  3577. CSEL=0
  3578. Repeat 
  3579.   Ink 1
  3580.   For I=0 To 3
  3581.     Box BCOORDS(I,0),BCOORDS(I,1) To BCOORDS(I,2),BCOORDS(I,3)
  3582.   Next 
  3583.   Ink 13 : Box BCOORDS(CSEL,0),BCOORDS(CSEL,1) To BCOORDS(CSEL,2),BCOORDS(CSEL,3)
  3584.   Repeat : A=Joy(1) : Until A<>0
  3585.   If Btst(0,A)
  3586.     Add CSEL,-1,0 To 3
  3587.   Else If Btst(1,A)
  3588.     Add CSEL,1,0 To 3
  3589.   End If 
  3590.   Repeat : Until Joy(1)=0
  3591. Until Btst(4,A)
  3592. Fade 2 : Wait 30
  3593. '
  3594. Data 98,75,211,87
  3595. Data 98,87,211,100
  3596. Data 98,100,211,113
  3597. Data 98,113,211,125
  3598. '
  3599. Screen Close 7
  3600. End Proc[CSEL]
  3601.  
  3602. Procedure FMV[FILE$]
  3603. Open In 1,FILE$
  3604. A=Frame Load(1 To 50)
  3605. A=Frame Play(50,1,4)
  3606. Double Buffer : Autoback 0
  3607. Pof(1)=0
  3608. L=Lof(1)
  3609. Reserve As Work 50,60000
  3610. FRAME=0
  3611. Repeat 
  3612.   T=Timer+3
  3613.   A=Frame Play(Start(50),Frame Load(1 To Start(50)))
  3614.   Screen Swap : Wait Vbl 
  3615.   FRAME=FRAME+1
  3616.   Repeat : Until Timer>T
  3617. Until FRAME=450 or Fire(1)
  3618. Screen Close 4
  3619. Erase 50
  3620. Close 1
  3621. End Proc
  3622.  
  3623. Procedure CREDITS[WHICH]
  3624.   Dim TXT$(25)
  3625.   If WHICH=0
  3626.     A$="Credits_1.spk"
  3627.   Else If WHICH=1
  3628.     A$="Credits_2.spk"
  3629.   Else If WHICH=2
  3630.     A$="Credits_Demo.spk"
  3631.   End If 
  3632.   
  3633.   Wait 30
  3634.   Load A$,230
  3635.   Unpack 230 To 4
  3636.   T=Timer+200
  3637.   Repeat : Until Timer>T or Fire(1)
  3638.   Screen Close 4
  3639.   Wait 30
  3640.   
  3641.   If WHICH<>2
  3642.     'scroll text up
  3643.     Screen Open 4,320,200,4,Lowres : Flash Off : Curs Off : Cls 0
  3644.     Double Buffer : Autoback 0
  3645.     Palette $0,$333,$666,$FFF
  3646.     FONT_FIND["XEN.font/8"]
  3647.     Set Font Param
  3648.     For I=0 To 3
  3649.       MENU_COLORS(I)=I
  3650.     Next 
  3651.     Gr Writing 0
  3652.     
  3653.     NOREAD=False : NRCOUNT=24
  3654.     Repeat 
  3655.       For I=0 To 24 : TXT$(I)=TXT$(I+1) : Next 
  3656.       If NOREAD=False
  3657.         Read A$
  3658.       Else 
  3659.         NRCOUNT=NRCOUNT-1
  3660.       End If 
  3661.       If A$="!" : A$="" : NOREAD=True : End If 
  3662.       TXT$(25)=A$
  3663.       For I=7 To 0 Step -1
  3664.         Cls 0
  3665.         For P=0 To 25
  3666.           CNTR=160-(Text Length(TXT$(P))/2)
  3667.           AA_FONT[CNTR,P*8+I,TXT$(P)]
  3668.         Next 
  3669.         Screen Swap : Wait Vbl 
  3670.       Next 
  3671.     Until NRCOUNT=0
  3672.   End If 
  3673.   
  3674.   Data "Final Existence"
  3675.   Data ""
  3676.   Data "INextSoft's First Full Role Playing Game"
  3677.   Data "",""
  3678.   Data "Programmed By","","John Bintz"
  3679.   Data "",""
  3680.   Data "Graphics By","","John Bintz"
  3681.   Data "",""
  3682.   Data "Music From","","The AMOS PD CD"
  3683.   Data "",""
  3684.   Data "Beta Testing By",""
  3685.   Data "John Bintz"
  3686.   Data "Jeremy Templeton"
  3687.   Data "Alex Fazenbaker"
  3688.   Data "Justin Bintz"
  3689.   Data "",""
  3690.   Data "Written in Amos Professional V2.0"
  3691.   Data "",""
  3692.   Data "Internext Software EMail Address"
  3693.   Data ""
  3694.   Data "uv334@victoria.tc.ca"
  3695.   Data "",""
  3696.   Data "Thanks To"
  3697.   Data ""
  3698.   Data "Becky Trout"
  3699.   Data "The Fazenbakers"
  3700.   Data "The Amos Mailing List"
  3701.   Data "Won Novalis"
  3702.   Data "Dragonfire Internet Services"
  3703.   Data "Fran�ois Lionet and Mandarin Software"
  3704.   Data "Pietro Ghizzoni"
  3705.   Data "","","","","","","","","",""
  3706.   Data "Internext Software Will Return"
  3707.   Data "In 1999"
  3708.   Data ""
  3709.   Data "!"
  3710. End Proc
  3711.  
  3712. 'i own everything, for I am Bill Gates, ruler of the Internet.